【问题标题】:Discord.py - bot sending information about message instead of messageDiscord.py - 机器人发送有关消息而不是消息的信息
【发布时间】:2020-07-17 21:17:21
【问题描述】:

我正在尝试创建一个系统,当您对表情符号做出反应时,它会将该消息(取决于您对什么表情符号做出反应)发送到另一个文本通道,现在它返回的是这个而不是实际消息:

<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)

【问题讨论】:

  • 如果您的消息是嵌入的,您可能需要等待ctx.send(msg.embed)
  • 好的,我会在不和谐服务器修复时试一试,谢谢!
  • 没有用@mr_spaar,说它没有“嵌入”属性。

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


【解决方案1】:

您必须使用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 返回 discord.PartialEmoji,将其与原始 unicode 进行比较可能不再有效。

【讨论】:

  • 啊,好吧。因此,我必须使用“表情符号”变量,而不是使用原始 unicode?因为当我点击反应时,现在什么都没有发生。那么我应该用什么替换 unicode 表情符号呢?
  • 是的,你可以点击discord.PartialEmoji看看它有什么属性。
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 2020-10-10
  • 2020-11-04
  • 2021-10-14
  • 2021-01-26
  • 2022-01-03
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多