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

Discord bot创建单次唯一邀请链接时获取guild出现IndexError问题

错误核心原因

client.guilds 是Python原生列表,存储机器人已加入的所有服务器对象,你遇到的两个报错都源于对这个列表的错误使用:

  • 直接传服务器ID作为列表下标:列表只支持从0开始的数字索引,你传入的服务器ID远大于列表长度,所以触发IndexError: list index out of range
  • 调用列表不存在的get()方法:Python原生列表没有get方法,所以触发AttributeError

正确获取指定服务器的写法

方法1:使用discord内置工具函数筛选

import discord

token = 'my discord bot token'
# 注意先配置Intents,新版discord.py必须开启对应权限才能获取服务器列表
intents = discord.Intents.default()
intents.guilds = True
client = discord.Client(intents=intents)
number_of_links = input('How many links do you want to create? ') 

@client.event 
async def on_ready():
    # 按ID筛选服务器
    g = discord.utils.get(client.guilds, id=809743502665056306)
    if not g:
        print("未找到对应服务器,请确认机器人已加入该服务器,且Intents配置正确")
        exit()
    c = g.get_channel(809803698212700190)
    # 后续逻辑

方法2:手动遍历列表匹配

g = None
for guild in client.guilds:
    if guild.id == 809743502665056306:
        g = guild
        break

附加优化建议

  1. 你创建邀请的代码可以简化,不需要调用discord.abc.GuildChannel的静态方法,直接用频道对象的实例方法即可:
# 原写法
i = await discord.abc.GuildChannel.create_invite(c, max_uses=1, max_age=0, unique=True)
# 简化后写法
i = await c.create_invite(max_uses=1, max_age=0, unique=True)
  1. 你当前的循环逻辑存在冗余,while循环内直接break,完全可以去掉while,直接生成指定数量的邀请即可:
invites = []
for _ in range(int(number_of_links)):
    new_invite = await c.create_invite(max_uses=1, max_age=0, unique=True)
    invites.append(new_invite)
    print(f"已生成邀请:{new_invite.url}")
  1. 请确认你在Discord开发者平台的Bot管理页面,已经开启了Server Members Intent和Guilds Intent权限,否则机器人无法正常获取服务器列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:45:02