Discord py 将在一个频道上发送的消息(带有嵌入)转发到另一个频道以及如何确定服务器中的成员数量?

Posted

技术标签:

【中文标题】Discord py 将在一个频道上发送的消息(带有嵌入)转发到另一个频道以及如何确定服务器中的成员数量?【英文标题】:Discord py forward messages(with embeds) sent on one channel to another and how to determine number of members in a server? 【发布时间】:2020-08-08 00:32:18 【问题描述】:

我想根据 ???? 上的反应数量将在特定频道上发送的消息转发到另一个频道表情符号反应。该消息有一些嵌入,并由 YAGPDB.xyz 机器人从子 reddit 发送。如果特定频道中的消息得到多个反对票反应,我想将该消息转发到另一个频道并在当前频道上删除它。这是来自这个机器人的典型消息的样子(带有嵌入),

我写了以下代码,

@client.event
async def on_raw_reaction_add(payload):
    if payload.channel_id in CHANNEL_LIST:
        if payload.emoji.name=='\U0001F53C':
            channel=client.get_channel(payload.channel_id)
            message=await channel.fetch_message(payload.message_id)
            reaction=get(message.reactions,emoji=payload.emoji.name)
            if reaction and reaction.count>1:
                await message.pin()
        elif payload.emoji.name=='\U0001F53B':
            channel=client.get_channel(payload.channel_id)
            message=await channel.fetch_message(payload.message_id)
            reaction=get(message.reactions,emoji=payload.emoji.name)
            if reaction and reaction.count>1:
                channel=client.get_channel(DELETED_MESSAGES_CHANNEL)
                await channel.send(': '.format(message.author, message.content),embed=message.content.embeds)
                await message.delete()

我收到以下错误,

Ignoring exception in on_raw_reaction_add
Traceback (most recent call last):
  File "C:\Python\Python38\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "s.py", line 46, in on_raw_reaction_add
    await channel.send(': '.format(message.author, message.content),embed=message.content.embeds)
AttributeError: 'str' object has no attribute 'embeds'

如果我使用embed=message.embeds 而不是message.content.embeds,我会收到以下错误,

Ignoring exception in on_raw_reaction_add
Traceback (most recent call last):
  File "C:\Python\Python38\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "s.py", line 46, in on_raw_reaction_add
    await channel.send(': '.format(message.author, message.content),embed=message.embeds)
  File "C:\Python\Python38\lib\site-packages\discord\abc.py", line 828, in send
    embed = embed.to_dict()
AttributeError: 'list' object has no attribute 'to_dict'

如何获取此消息中的所有嵌入内容并将其转发到此处发送到另一个频道?还有,我如何知道我的服务器中不是机器人的成员数量?任何建议都非常感谢!

【问题讨论】:

你试过只使用embed=message.embeds吗?很确定embedscontent处于同一级别,而不是下属。 @DaveStSomeWhere 是的,我已经尝试过了,并编辑了问题以将其输出包含在结尾。 【参考方案1】:

await channel.send(': '.format(message.author,message.content),embed=message.embeds[0]) 通常,嵌入列表对象中只有一个嵌入。因此,在大多数情况下,只需使用 embeds[0]。到目前为止,我还没有看到带有多个嵌入的消息。

【讨论】:

以上是关于Discord py 将在一个频道上发送的消息(带有嵌入)转发到另一个频道以及如何确定服务器中的成员数量?的主要内容,如果未能解决你的问题,请参考以下文章

在 Discord (discord.py bot) 中仅从 1 个频道发送消息

Discord.py - 如何接收和发送消息到特定频道?

如何从特定频道狙击消息(discord.py)

Discord.py bot 在添加反应时将消息重新发送到另一个频道中断

discord.py,使用 webhook 在所有通道中发送消息

Discord - 将消息从频道实时发送到我的网站