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

如何让Discord.py机器人在指定频道发送消息(无需频道ID)

解决你的Discord机器人消息发送问题

首先,你遇到的NameError: name 'teste' is not defined是核心问题——你在await client.send_message(destination=teste, ...)里用了teste这个变量,但代码里根本没定义它代表哪个频道对象,Python自然不知道该往哪发消息。

接下来给你几个不用频道ID就能指定频道的方案,同时修正一些可能的版本兼容问题:

1. 通过服务器+频道名称定位频道

如果你的机器人只在特定服务器里运行,或者你明确知道目标频道所属的服务器,可以这样做:

# 先获取目标服务器(可以用服务器名称,也可以用ID,名称如果有重名可能出错)
target_guild = discord.utils.get(client.guilds, name="你的服务器名称")
# 再从服务器里找到目标频道
teste = discord.utils.get(target_guild.channels, name="目标频道名称")

# 注意:discord.py新版本里已经弃用了client.send_message,直接用频道对象的send方法更稳妥
if teste:
    await teste.send(content='oi (hello)')
else:
    print("找不到指定的频道,请检查名称是否正确")

2. 在所有机器人加入的服务器里找频道

如果频道名称在所有服务器里是唯一的,可以直接全局搜索:

teste = discord.utils.get(client.get_all_channels(), name="目标频道名称")
if teste:
    await teste.send(content='oi (hello)')
else:
    print("未找到匹配名称的频道")

额外注意事项

  • 权限问题:确保你的机器人在目标频道里有发送消息的权限,否则即使找到频道也会静默失败(没报错但没消息)。
  • 版本兼容:你用的client.send_message是旧版discord.py的语法,现在推荐直接调用频道对象的send()方法,避免因为版本差异导致的问题。
  • 名称大小写:频道名称是区分大小写的,比如「General」和「general」会被视为不同频道,要确保名称完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:44:55