Возможная проблема итерации? - PullRequest
0 голосов
/ 03 октября 2018

Я решил переписать свой код для правого борта для моего бота.У меня возникает проблема, когда любая реакция, кроме реакции звездочки, добавляется в сообщение, а затем сообщение отправляется на правый борт.

Как он должен работать, когда к сообщению добавляется только звездный эмодзи, который он добавляет к правому борту.

Я не уверен, что это простая итерация, но вот с чем я работаю

    async def on_reaction_add(self, reaction, member):
    for guild in self.bot.guilds:
        chan = get(guild.channels, name="starboard")
        if chan:
            for i in reaction.message.reactions:
                if i.emoji == '⭐':
                    return
                if reaction.message.author == member:
                    return
                if reaction.count < 1:
                    return
                embed=discord.Embed(color=0xff8000, description=reaction.message.content)
                embed.set_author(name=reaction.message.author.name, icon_url=reaction.message.author.avatar_url)
                if len(reaction.message.attachments) > 0:
                    embed.set_image(url=reaction.message.attachments[0]["url"])
                embed.set_footer(text=f"Posted in {reaction.message.channel.name}")
                embed.timestamp = dt.datetime.utcnow()
            await chan.send("New Star!", embed=embed) 

1 Ответ

0 голосов
/ 03 октября 2018
if i.emoji == '⭐':
    return

Если эмодзи - звезда, остановите сопрограмму.Я думаю, что вы ищете что-то более похожее на

async def on_reaction_add(self, reaction, member):
    chan = get(reaction.message.guild.channels, name="starboard")
    if not chan:
        return
    if reaction.emoji != '⭐':  # We only care about stars
        return
    if reaction.message.author == member: 
        return
    if reaction.count != 1: # Only the first time
        return
    embed=discord.Embed(color=0xff8000, description=reaction.message.content)
    embed.set_author(name=reaction.message.author.name, icon_url=reaction.message.author.avatar_url)
    if len(reaction.message.attachments) > 0:
        embed.set_image(url=reaction.message.attachments[0].url)
    embed.set_footer(text=f"Posted in {reaction.message.channel.name}")
    embed.timestamp = dt.datetime.utcnow()
    await chan.send("New Star!", embed=embed) 

Это отправляет сообщение на правый борт, когда кто-то использует звезду, чтобы среагировать в первый раз.В настоящий момент, если первая звезда получена от автора сообщения, я не могу допустить, чтобы ее поместили на правый борт.Я оставляю это как упражнение для читателя; -)

...