如何在discord.py中获得反应表情符号?

时间:2020-11-03 06:12:16

标签: python discord discord.py

我正在尝试使用MongoDb做出多行会反应角色命令,

        await ctx.send(embed=gen_embed("React to this message with reaction you want to use.\n**Don't use Nitro Emoji that is not in this server.**"))
        reaction,user = await self.bot.wait_for("reaction_add",timeout=30,check=reaction_check)
        try:
            #emoji = await ctx.guild.get_emoji(reaction.Emoji)
        except:
            return await ctx.send(embed=gen_embed("<:xmark:771032946915934298> | I can't see that emoji."))

这是代码的一部分,我很固执。 Bot要求用户对表情符号做出反应,然后机器人应尝试查找表情符号(表情符号可以是默认的或自定义的),如果机器人可以找到表情符号,它将存储ID或类似表情符号的东西,如果可以,然后它会说我看不见...

现在问题是,Idk如何检查机器人是否可以看到该表情符号以及该事件的确切存储位置。 我尝试阅读文档,但是文档似乎不是为初学者编写的。

2 个答案:

答案 0 :(得分:0)

使用str(reaction.emoji)=='?'代替get_emoji。
希望这会有所帮助
您可以在https://discordpy.readthedocs.io/en/latest/api.html#emoji上找到有关此信息的更多信息 这只会检查1个表情符号

答案 1 :(得分:0)

好吧,idk,如果我无法正确解释问题,或者只是你, 这对我有用。

        await ctx.send(embed=gen_embed("React to this message with reaction you want to use.\n**Don't use Nitro Emoji that is not in this server.**"))
        reaction,user = await self.bot.wait_for("reaction_add",timeout=30,check=reaction_check)
        if cancel_check(role) is True:
            return await ctx.send(embed=gen_embed('<:xmark:771032946915934298> | Cancelled!'))
        elif cancel_check(role) is False:
            if isinstance(reaction.emoji,str):
                await msg.add_reaction(str(reaction.emoji))
            else:
                try:
                    emoji = await ctx.guild.fetch_emoji(reaction.emoji.id)    
                    await msg.add_reaction(emoji) 
                except:
                    return await ctx.send(embed=gen_embed("<:xmark:771032946915934298> | I can't see that emoji."))

我敢肯定会有更好的方法来做到这一点,但这就是我现在得到的。如果我找到更好的方法,我将编辑答案。 reaction_check也不是什么,它只是检查作者是否是启动设置的用户。