【问题标题】:Discord.py failing to send message to a specific channel in a cog/extension fileDiscord.py 无法将消息发送到 cog/扩展文件中的特定通道
【发布时间】:2022-01-22 11:46:57
【问题描述】:

我最近刚开始使用 Discord.py 的 cogs/extension 文件,但遇到了一些我不知道如何解决的问题。我正在尝试在特定频道中发送消息,但我总是收到错误AttributeError: 'NoneType' object has no attribute 'send'。我知道我可以通过以下方式在特定频道中发送消息:

@client.command()
async def test(ctx):
  await ctx.send("test")
  channel = client.get_channel(1234567890)
  await channel.send("test2")

这在我的“主文件”中工作得很好,但在我的“扩展文件”中却没有,所以这不是因为 ID 错误。 await ctx.send("test") 也可以正常工作,与我拥有的任何其他命令一起使用,只是 channel.send 会造成麻烦。

我正在导入完全相同的库 & co,否则两个文件中的“设置”也应该完全相同。

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    NoneType 错误表示它没有正确识别通道。当您使用get_channel 时,您正在寻找机器人缓存中可能没有的频道。您可以改用 fetch_channel - 这是一个 API 调用。

    @client.command()
    async def test(ctx):
      await ctx.send("test")
      channel = await client.fetch_channel(1234567890)
      await channel.send("test2") 
    

    【讨论】:

    • 抱歉回复晚了,但我现在收到了错误'NoneType' object has no attribute 'request'
    • 那么你的代码的另一部分有问题。这部分没有任何'request' 属性。寻找类似的东西:something.request 它导致了错误。
    • 那么我需要您的其余代码来帮助您,我无法通过仅查看这部分代码来判断可能是什么问题。
    • 首先,您不能在主文件中只创建一次client。阅读Cogs 我认为这是您想要实现的目标 (your code as a cog)。如果您只想加载一个简单的命令:link,但它有很多限制 - 例如你不能使用client 我使用来自ctxguild 对象来获取频道(小解决方法)。总之,尽量创建一个 Cog,并且只在它是一个简单的命令时才加载它。
    • 我希望它清晰且有帮助。如果您有任何问题随时问。 :)
    【解决方案2】:

    如您所知,发生错误是因为您的频道无法识别。解决方案是fetch_channel(channel_id)。问题出在你的channel = client.get_channel (1234567890)

    尝试在客户端前添加await。接下来将get_channel 替换为fetch_channel

    对于一般用途,请考虑您的 get_channel(),而不是您需要 fetch_channel (channel_id) 来检索具有指定 ID 的 x.GuildChannelx.PrivateChannel

    @client.command()
    async def test(ctx):
    
      await ctx.send("test")
      channel = await client.fetch_channel(1234567890) #update
      await channel.send("test2")
    

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多