【问题标题】:Trying to send message to a channel every hour尝试每小时向频道发送消息
【发布时间】:2020-04-14 01:34:49
【问题描述】:

我正在尝试创建一个简单的 Discord 机器人,它每小时向频道发送一条消息,当我在终端中对其进行测试时,它工作正常,每 2 秒打印一次“测试”。但是当我想添加 'await bot.channel.send('here')' 行时,它只会在终端中打印一次'test',而在不和谐频道中什么也没有

import discord,asyncio,os
from discord.ext import commands, tasks


token = 'xxx'
bot = commands.Bot(command_prefix='.')

@bot.event
async  def on_ready():
    change_status.start()
    print('bot in active')

@tasks.loop(seconds=2)
async def change_status():
    channel = bot.get_channel = xxx
    await bot.change_presence(activity=discord.Game('online'))
    print('test')
    await bot.channel.send('here')
bot.run(token)

【问题讨论】:

  • 你试过在@tasks.loop外面跑一次change_status吗?
  • 是的,它只会打印一次'test',我需要它,因为每小时重复一次这个功能。
  • 嗯,也许你错过了change_status.start()
  • 我应该在哪里添加?
  • 假设channel是指你想发送消息的通道,你应该使用那个对象:await channel.send(...)

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


【解决方案1】:

你做错了:

channel = bot.get_channel = xxx

问题是 bot.get_channel 是一个函数。这意味着您实际上需要执行以下操作:

channel = bot.get_channel(xxx)

出错的原因是您没有正确执行 bot.get_channel() 函数。这样channel的值就变成了xxx。 但是为了向通道发送消息,您需要通道对象。只有正确执行函数才能得到这个。

如果你这样做了:

channel = bot.get_channel(id)
await channel.send('Your message')

然后 bot.get_channel(id) 返回一个通道对象,您可以将其分配给变量通道。您以后可以使用它向该频道发送消息。

另外需要注意的是 bot.channel 与 channel 变量不同。因此,如果您在通道中有一个通道对象。您不能使用 bot.channel.send() 发送内容。你需要做 channel.send()。

阅读文档非常有用: https://discordpy.readthedocs.io/en/latest/api.html?highlight=get_channel#discord.Client.get_channel

【讨论】:

  • 感谢您的深入解释,我进行了这些更改,但仍然无法正常工作。我什至在 channel = bot.get_channel(id) 上方添加了一条打印语句,以查看该函数是否被调用,它正在被调用但不会将消息发送到不和谐服务器。
  • 对不起,我错过了最后一个中的“等待”这个词。如果您不在 channel.send() 前面添加“等待”一词,它将失败。因为 channel.send() 是一个协程。如果您仍然有问题,则可能是您提供的 ID 不正确。
  • 是的,我这样做了,我还打印了通道以查看它会返回什么,它返回无。我不知道为什么,因为我从 Discord 复制了 ID。我点击了频道>>服务器设置>>小部件,然后我直接从那里复制了频道ID。我做错了吗?
  • None 表示它没有值。您在服务器设置中找到的 id 是服务器的 id,而不是频道。这就是为什么 channel 的值为 None 的原因。因为id不正确。获取频道 ID。首先通过执行以下操作启用不和谐的开发人员设置:设置 > 外观 > 检查开发人员模式。之后,右键单击频道并复制 ID。
  • 哇,非常感谢,它成功了。我正在努力找出问题所在,我需要更加注意细节。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2020-04-07
  • 1970-01-01
  • 2022-06-10
  • 2020-05-24
  • 2021-10-25
  • 2021-08-27
相关资源
最近更新 更多