discord.py,在没有 on_message() 事件的情况下通过通道 id 发送消息?

Posted

技术标签:

【中文标题】discord.py,在没有 on_message() 事件的情况下通过通道 id 发送消息?【英文标题】:discord.py, send message by channel id without on_message() event? 【发布时间】:2021-07-23 01:36:00 【问题描述】:

我为我的机器人配置和代码中的一般内容创建了一个类,我很整洁 所以,客户端是 discord.Client() 和机器人。是我的课 在我的机器人类中,我存储了一些频道 ID,然后我注意到 client.send_message(channelid, message) 方式不再支持。但是,我将频道 ID 变量编辑为

channel1=client.get_channel(channelid)

client=discord.Client() 在我的课上,它的定义。

我用它来发送消息

await bot.channel1.send("hello world")

我期待该频道中的消息,但现实:

Task exception was never retrieved
future: <Task finished name='Task-2' coro=<bot2() done, defined at /path/to/file/bot.py:46> exception=AttributeError("'NoneType' object has no attribute 'send'")>
Traceback (most recent call last):
  File "/path/to/file/bot.py", line 53, in bot2
    await bot.channel1.send(fc)
AttributeError: 'NoneType' object has no attribute 'send'

简而言之,我的 channel1 定义是 nonetype.. 为什么?

是的,我在我的代码中使用了另一个 async def 并运行它,因为该代码应该在 on_message() 之外运行并且应该运行 async

我在文件末尾调用了我的异步函数

client.loop.create_task(bot())
client.loop.create_task(bot2())
client.loop.create_task(dead())
client.run(bot.token)

【问题讨论】:

channel1 已定义。 bot.channel1 未定义。 channel1 在课堂机器人class bot: channel1=xxx 你做了self.channel1吗? 嗯,我不知道这是什么意思,在哪里我必须这样做? 你想在哪里使用bot.channel1?在方法内部? 【参考方案1】:

channel1 是非类型对象,因为我在 bot 准备好之前定义了

  await client.wait_until_ready()
  channel1=client.get_channel(id)

【讨论】:

以上是关于discord.py,在没有 on_message() 事件的情况下通过通道 id 发送消息?的主要内容,如果未能解决你的问题,请参考以下文章

在 discord.py 中,on_message 不会为一个公会触发

discord.py bot:on_message 检测机器人等待发送()消息

与 on_message 事件有关的 Discord py Cog 问题,不起作用

discord.py 中 on_message 的冷却时间

如何在 discord.py 中将 on_message 与 sqlite3 集成?

Discord.py on_message() 但仅用于私人消息