You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py机器人调用!say命令向已配置频道发消息返回None求助

问题根因

bot.get_channel() 方法要求传入整数类型的频道ID,你从文本文件读取、做符号替换后得到的replaced_output4是字符串类型,类型不匹配导致方法始终返回None。

直接修复方案

修改获取频道对象的代码行,对处理后的ID做整数类型转换即可,建议额外加strip()清除可能存在的空白字符:

channel = bot.get_channel(int(replaced_output4.strip()))

额外优化建议

1. 简化ID提取逻辑

不需要逐次替换符号,可以直接提取字符串中的所有数字字符,逻辑更稳妥:

# 替换原有的文件读取+多次替换逻辑
with open("channel.txt", "r", encoding="utf-8") as f:
    raw_content = f.read()
# 提取所有数字字符后转整数
channel_id = int(''.join(filter(str.isdigit, raw_content)))
channel = bot.get_channel(channel_id)

2. 优化存储逻辑

你当前存储到channel.txt的内容是元组转字符串的结果,建议在!set_channel命令的存储逻辑里,直接把纯ID字符串写入文件,不需要存储元组格式的内容,后续读取时直接转整数即可,不需要做任何符号处理。

3. 版本兼容检查

如果你使用的是Discord.py 2.0及以上版本,需要确保两点:

  • 机器人开发者后台已经开启「消息内容意图」开关
  • 初始化Bot对象时已经配置对应的意图:
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)

4. 权限检查

确认机器人在目标频道拥有「发送消息」、「嵌入链接」权限,避免拿到频道对象后依然无法发送消息。

内容的提问来源于stack exchange,提问作者DeadFinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:36:04