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

discord.py中如何将公会ID转为可调用text_channels属性的对象

核心错误点

你的代码存在两个直接导致报错的问题:

  1. input() 返回值是字符串类型,discord.py所有依赖ID查询的方法都要求传入整数类型ID,且你当前存储的只是纯ID值,并非Guild类实例,自然无法访问.text_channels属性。
  2. Guild.text_channels 是Guild实例自带的可迭代属性,不需要用with上下文管理器包裹,你的写法属于语法误用。
正确实现步骤
  • 将输入的ID字符串强转为整数,增加异常捕获避免输入非数字内容导致崩溃
  • 通过Bot实例的get_guild()方法传入整数ID,从本地缓存获取对应Guild对象;若缓存未命中,可使用协程方法fetch_guild()主动向Discord接口拉取数据
  • 判空校验Guild对象是否存在(ID错误、Bot未加入目标公会时会返回None/抛出NotFound异常)
  • 直接迭代Guild对象的text_channels属性即可拿到所有文本频道
修正后代码
# 此处bot为你初始化的discord.py Bot/Client实例
async def guildNuke():
    raw_id = input("Nuke guild ID: ")
    # 转换ID为整数
    try:
        guild_id = int(raw_id)
    except ValueError:
        print("错误:请输入有效的数字ID")
        return
    # 从缓存获取公会对象
    nukeguild = bot.get_guild(guild_id)
    # 缓存未命中时主动拉取
    if not nukeguild:
        try:
            nukeguild = await bot.fetch_guild(guild_id)
        except discord.NotFound:
            print("错误:未找到对应公会,请确认ID正确且Bot已加入该公会")
            return
    # 遍历所有文本频道
    for channel in nukeguild.text_channels:
        print(channel.name, channel.id)
补充说明

没有更简便的绕开步骤,所有对公会资源的操作都必须先拿到合法的Guild实例,上述流程是discord.py操作公会资源的标准写法,不存在省略步骤的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:21:22