python - Discord.py - 机器人发送有关消息而不是消息的信息
问题描述
我正在尝试创建一个系统,当您对表情符号做出反应时,它会将该消息(取决于您对什么表情符号做出反应)发送到另一个文本通道,现在它正在返回此消息而不是实际消息:
<Message id=733788372891467838 channel=<TextChannel id=733721953134837861 name='admin-bug' position=1 nsfw=False news=False category_id=733717942604398684> type=<MessageType.default: 0> author=<Member id=733720584831369236 name='ReefCraft' discriminator='3102' bot=True nick=None guild=<Guild id=733717942604398682 name="Pumbalo's server" shard_id=None chunked=True member_count=2>> flags=<MessageFlags value=0>>
我已经尝试.content
在变量上使用,但它仍然不起作用,并且它给了我错误:
discord.errors.HTTPException: 400 Bad Request (error code: 50006): Cannot send an empty message
这是我的代码:
import discord
from discord.ext import commands
import asyncio
TOKEN = '---'
bot = commands.Bot(command_prefix='!!')
emojis = ["\u2705", "\U0001F6AB", "\u274C"]
@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)
message = await adminBug.send(embed=embed)
# Add 3 reaction (different emojis) here
for emoji in emojis:
await message.add_reaction(emoji)
@bot.event
async def on_reaction_add(reaction, user):
message = reaction.message
msg = message.content
emoji = reaction.emoji
if user.bot:
return
if emoji == "\u2705":
fixed = bot.get_channel(733722567449509958)
await fixed.send(msg)
elif emoji == "\U0001F6AB":
notBug = bot.get_channel(733722584801083502)
await notBug.send(message)
elif emoji == "\u274C":
notFixed = bot.get_channel(733722600706146324)
await notFixed.send(message)
else:
return
bot.run(TOKEN)
解决方案
您必须使用on_raw_reaction_add()
,它返回一个RawReactionActionEvent
对象。您将能够获得message_id
并用于fetch_message
最终获得嵌入:
@bot.event
async def on_raw_reaction_add(payload):
channel = bot.get_channel(payload.channel_id)
msg = await channel.fetch_message(payload.message_id)
embed = msg.embeds[0]
emoji = payload.emoji
if user.bot:
return
if emoji == "emoji 1":
fixed = bot.get_channel(733722567449509958)
await fixed.send(embed=embed)
elif emoji == "emoji 2":
notBug = bot.get_channel(733722584801083502)
await notBug.send(embed=embed)
elif emoji == "emoji 3":
notFixed = bot.get_channel(733722600706146324)
await notFixed.send(embed=embed)
else:
return
注意:payload.emoji
返回 a discord.PartialEmoji
,将其与原始 unicode 进行比较可能不再有效。
推荐阅读
- python - gunicorn app.wsgi 在 heroku 中实际上在做什么?
- django - 隐藏所有数据集(chartjs)时如何显示比例?
- graphics - 如何生成“草图”动画来介绍 3D 场景?
- c# - .Net Core Middleware - 从请求中获取表单数据
- python - 从 3 个数字中找出最大的数字
- django - 使用带有单个文件上传字段的 Django 将多张图片上传到新闻
- ios - CocoaPods 找不到 pod“Firebase/CoreOnly”的兼容版本
- java - 如何在春天创建一个非阻塞的@RestController webservice?
- java - LDAP 身份验证 NULL
- bash - Apdoc 安装为全局:如何运行它?