client.get_channel(id) 在存在的频道上返回“none”

Posted

技术标签:

【中文标题】client.get_channel(id) 在存在的频道上返回“none”【英文标题】:client.get_channel(id) returning "none" on a channel that exists 【发布时间】:2021-05-17 17:05:17 【问题描述】:

我正在尝试为 Discord 制作一个机器人,每次我尝试使用以下代码向指定频道发送消息时,它不会给我任何错误,但会打印“无”,我当通道不存在时会期望。我现在已经尝试使用多个公会/服务器和多个文本通道,以及运行相同代码的多台计算机。在下面的代码中,我用作为 channelID 的 int 替换了 channelID,用我的令牌(字符串)替换了令牌。

import discord
from discord.ext import commands

intents = discord.Intents.all()
client = commands.Bot(command_prefix = 'bday ', intents = intents)
channel = client.get_channel(channelID)

print(channel)

client.run("token")

机器人确实具有管理员权限,以及两个意图网关

【问题讨论】:

您是否已将机器人邀请到具有给定频道 ID 的频道所在的服务器?如果没有,它不会像任何其他 get_ 函数一样工作。 @langley 是的,我有 【参考方案1】:

你需要修改

client.get_channel()

client.get_guild(your server's id).get_channel(channel id)

【讨论】:

现在它给了我错误 AttributeError: 'NoneType' object has no attribute 'get_channel',所以它在寻找公会时遇到了同样的问题【参考方案2】:

您似乎试图在实际运行您的机器人之前调用机器人的功能。

尝试在on_ready() 回调中添加您的代码,以确保您仅在初始化机器人本身后才尝试获取您的频道。

import discord
from discord.ext import commands

intents = discord.Intents.all()
client = commands.Bot(command_prefix = 'bday ', intents = intents)

@client.event
async def on_ready():
    channel = client.get_channel(channelID)
    print(channel)

client.run("token")

【讨论】:

非常感谢,终于成功了!我已经为此工作了几个小时,但无济于事。 :) 我已将您的答案标记为已接受

以上是关于client.get_channel(id) 在存在的频道上返回“none”的主要内容,如果未能解决你的问题,请参考以下文章

消息中的按钮,不和谐

Python discord.py 显示未知命令

单击表情时不会向用户发送 DM(直接消息)

python discord bot on_disconnect 消息

我在特定频道的工作脚本有问题

如何从已删除的消息中获取嵌入内容?