Discord.py-使机器人对自己的消息做出反应

时间:2020-07-17 19:41:37

标签: python python-3.x discord.py discord.py-rewrite

我正试图使我的不和谐机器人对自己的信息做出反应。系统的工作方式如下:

一个人使用命令!! bug-并在DM中收到一条消息,她/她应该回答这些问题。然后,无论他/她回答什么,都会将嵌入的消息传输到管理员文本通道。

但是我需要添加3个表情符号,或与三种不同的表情符号反应。根据管理员的选择,它将再次传输消息。因此,如果管理员对等于“固定”的表情符号做出反应,它将被移动到“固定”文本通道(整个消息)。

我对此进行了大量研究,但只发现了有关旧discord.py的线索,这意味着 await bot.add_react(emoji)-但据我所知,它不再有效!

这是我的代码:

import discord
from discord.ext import commands
import asyncio

TOKEN = '---'
bot = commands.Bot(command_prefix='!!')

reactions = [":white_check_mark:", ":stop_sign:", ":no_entry_sign:"]


@bot.event
async def on_ready():
    print('Bot is ready.')


@bot.command()
async def bug(ctx, desc=None, rep=None):
    user = ctx.author
    await ctx.author.send('```Please explain the bug```')
    responseDesc = await bot.wait_for('message', check=lambda message: message.author == ctx.author, timeout=300)
    description = responseDesc.content
    await ctx.author.send('````Please provide pictures/videos of this bug```')
    responseRep = await bot.wait_for('message', check=lambda message: message.author == ctx.author, timeout=300)
    replicate = responseRep.content
    embed = discord.Embed(title='Bug Report', color=0x00ff00)
    embed.add_field(name='Description', value=description, inline=False)
    embed.add_field(name='Replicate', value=replicate, inline=True)
    embed.add_field(name='Reported By', value=user, inline=True)
    adminBug = bot.get_channel(733721953134837861)
    await adminBug.send(embed=embed)
    # Add 3 reaction (different emojis) here

bot.run(TOKEN)

2 个答案:

答案 0 :(得分:1)

在discord.py@rewrite中,您必须使用discord.Message.add_reaction

emojis = ['emoji 1', 'emoji_2', 'emoji 3']
adminBug = bot.get_channel(733721953134837861)
message = await adminBug.send(embed=embed)

for emoji in emojis:
    await message.add_reaction(emoji)

然后,要利用反应,您必须使用discord.on_reaction_add事件。当某人对消息作出反应并触发Reaction对象和User对象时,将触发此事件:

@bot.event
async def on_reaction_add(reaction, user):
    embed = reaction.embeds[0]
    emoji = reaction.emoji

    if user.bot:
        return

    if emoji == "emoji 1":
        fixed_channel = bot.get_channel(channel_id)
        await fixed_channel.send(embed=embed)
    elif emoji == "emoji 2":
        #do stuff
    elif emoji == "emoji 3":
        #do stuff
    else:
        return

注意:您必须用表情符号替换"emoji 1""emoji 2""emoji 3"add_reactions接受:

  • 您可以在emojipedia上复制的全局表情符号(例如?)
  • 原始unicode(您尝试过)
  • Discord emojis\N{EMOJI NAME}
  • 自定义discord emojis(可能有一些更好的方法,经过少量研究后我提出了)
    async def get_emoji(guild: discord.Guild, arg):
         return get(ctx.guild.emojis, name=arg)
    

答案 1 :(得分:0)

当您想添加非自定义表情符号时,您需要将其 id 和名称添加到 discord.py 可以读取的格式中:<:emoji name:emoji id>

例如,作为不和谐默认表情符号的白色和绿色复选表情符号... 您需要为 discord.py 编写 <:white_check_mark:824906654385963018> 才能识别它。