Discord.py — Оператор возврата, вызывающий дублирование отправленных сообщений

#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)