Discord.py 让机器人复制每条消息,包括文件

Posted

技术标签:

【中文标题】Discord.py 让机器人复制每条消息,包括文件【英文标题】:Discord.py make bot copy every message, including files 【发布时间】:2021-05-11 15:00:46 【问题描述】:

我的目标是制作一个不和谐的机器人,它会以用户发送的相同消息进行响应,如果用户发送文件,机器人会发送它的链接。

我可以让这两个部分单独工作,但在一起我只是遇到问题(见底部),在我当前的代码中,只有“独立”文件发送工作,短信没有,如果你有文本 + 一个文件,文件链接将由机器人发送,但文本不会。如果我把第二部分放在最上面,那么我基本上会得到完全相反的结果,只发送文本,没有文件。

我的代码:

@client.event # Clone message
async def on_message(message):
    await client.process_commands(message)
    if message.author == client.user:
        return
    ch = message.channel
    await ch.send(message.content)

@client.event # Clone file
async def on_message(message):
    await client.process_commands(message)
    if message.author == client.user:
        return
    url = message.attachments[0].url
    ch = message.channel
    await ch.send(url)

底部的克隆文件总是给出IndexError: list index out of range 错误

底部的克隆消息总是给出400 Bad Request (error code: 50006): Cannot send an empty message 错误

【问题讨论】:

好吧,你对底部函数所做的是覆盖你创建的第一个函数......你应该将它们合并到一个 on_message 函数中,你可以通过 try except 循环来处理预期的错误,或者确保首先检查您的消息数据不会出错 【参考方案1】:

正如@FierySpectre 指出的那样,您正在覆盖on_message 函数。您可以将您想做的事情合并到一个函数中。

@client.event
async def on_message(message):
    await client.process_commands(message)
    if message.author == client.user:
        return
    ch = message.channel
    try: # tries to send the url of the file
        await ch.send(message.attachments[0].url)
    except IndexError: # if index error is received, that means the user entered a regular message
        pass
    await ch.send(message.content) # prints out the message

【讨论】:

以上是关于Discord.py 让机器人复制每条消息,包括文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 discord.py 制作一个检查某个服务器通道中所有消息的机器人

如何跟踪 discord.py 中发送的消息

如何让 Discord.py 机器人向服务器所有者发送消息?

(Discord.py)如何让机器人在一段时间后删除自己的消息?

如何让不和谐机器人使用 discord.py 向消息添加表情符号反应?

如何让我的 discord.py 机器人提及我的消息中提到的某人?