#python #discord.py
#python #discord.py
Вопрос:
У меня есть простая команда, которая принимает каждый канал в определенной категории и отправляет их в embed
. В конце каналов помечен смайлик, и я использую его, чтобы добавить реакцию на вставку. Имея это в виду, не каждый канал в категории имеет тот же формат канала, который ожидает бот, поэтому я добавил список «игнорировать». Проблема, с которой я сталкиваюсь, заключается в том, что return
оператор вызывает дублирование и путаницу встраивания.
Текущая проблема: https://gyazo.com/a258c57b7d5c7a1286128e3643a366eb
Формат канала: https://gyazo.com/5c19fcfc7304a1c88c058843ab8584cc
Ожидаемый результат: https://gyazo.com/0c1e25018831baf435618ce54f607f8b
reactions = []
category = discord.utils.get(ctx.guild.categories, id=788794712474910771)
embed = discord.Embed(title='Realms channels')
for channel in category.channels:
if channel.id in [788803551974785066, 788803379261997116]:
return
else:
channel = channel.name
channel = channel.split('-')
if len(channel) == 2: #realm-emoji
realm, emoji = channel
reactions.append(emoji)
embed.add_field(name=realm, value=emoji, inline = False)
elif len(channel) == 3: #realm-name-emoji
realm, realm2, emoji = channel
realmname = realm "-" realm2
reactions.append(emoji)
embed.add_field(name=realmname, value=emoji, inline = False)
else: #realm-name-name-emoji
realm , realm2, realm3, emoji = channel
reactions.append(emoji)
realmname = str(realm) "-" str(realm2) "-" str(realm3)
embed.add_field(name= realmname, value=emoji, inline = False)
msg = await ctx.send(embed = embed)
for emoji in reactions:
await msg.add_reaction(emoji)
Любые предложения или советы очень помогли бы.
Ответ №1:
Вы не должны использовать return
в цикле, он просто завершит работу, которую вы должны использовать continue
, чтобы пропустить нежелательные каналы. Способ получения смайликов и имени не являются общими.
my_list[-1]
получит последний элемент в списке, который является смайликом.my_list[:-1]
каждый элемент, кроме последнего.
@bot.command()
async def checkin(ctx):
reactions = []
category = discord.utils.get(ctx.guild.categories, id=788794712474910771)
embed = discord.Embed(title='Realms channels')
for channel in category.channels:
if channel.id in [788803551974785066, 788803379261997116]:
continue
channel = channel.name.split('-')
# last element is the emoji
emoji = channel[-1]
reactions.append(emoji)
embed.add_field(
name='-'.join(channel[:-1]), value=emoji, inline=False)
msg = await ctx.send(embed=embed)
for emoji in reactions:
await msg.add_reaction(emoji)