Discord.py - 让机器人对自己的消息做出反应
Discord.py - Make a bot react to its own message(s)
我正在尝试让我的 discord 机器人对它自己的消息作出反应,几乎。系统是这样工作的:
一个人使用命令 !!bug - 并在 DM 中收到一条消息',she/she 应该回答这些问题。然后无论 he/she 回答什么,它都会将嵌入的消息传输到管理员文本频道。
但我需要添加 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)
在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
event. This event will be triggered when someone reacts to a message and will return a Reaction
object and a 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)
当您想添加非自定义表情符号时,您需要将其 ID 和名称添加为 discord.py 可以读取的格式:<:emoji name:emoji id>
例如,作为不和谐默认表情符号的白色和绿色检查表情符号...
您需要为 discord.py 编写 <:white_check_mark:824906654385963018>
才能识别它。
我正在尝试让我的 discord 机器人对它自己的消息作出反应,几乎。系统是这样工作的:
一个人使用命令 !!bug - 并在 DM 中收到一条消息',she/she 应该回答这些问题。然后无论 he/she 回答什么,它都会将嵌入的消息传输到管理员文本频道。
但我需要添加 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)
在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
event. This event will be triggered when someone reacts to a message and will return a Reaction
object and a 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)
当您想添加非自定义表情符号时,您需要将其 ID 和名称添加为 discord.py 可以读取的格式:<:emoji name:emoji id>
例如,作为不和谐默认表情符号的白色和绿色检查表情符号...
您需要为 discord.py 编写 <:white_check_mark:824906654385963018>
才能识别它。