使用Discord.py开发可通过服务器邀请链接获取服务器名称或ID的机器人
开发能解析Discord邀请链接的机器人
嘿,我来帮你搞定这个需求!下面是一套完整的实现方案,用Python和discord.py库来做,操作起来很顺畅:
准备工作
- 先安装依赖库:打开终端运行
pip install discord.py - 去Discord开发者平台创建你的机器人,拿到专属的Bot Token,记得在「Privileged Gateway Intents」里开启
Message Content Intent(这是读取用户输入链接必须的权限) - 把机器人邀请到你的目标服务器,邀请时至少要给它「Send Messages」和「Use Slash Commands」权限
核心代码实现
这里用Discord推荐的Slash命令来做(比前缀命令更符合现在的Discord生态),直接复制下面的代码,替换掉你的Bot Token就行:
import discord from discord.ext import commands from discord import appcommands # 设置机器人需要的权限意图 intents = discord.Intents.default() intents.message_content = True # 必须开启,不然读不到用户输入的链接 # 初始化机器人 bot = commands.Bot(command_prefix="!", intents=intents) # 机器人上线后的初始化操作 @bot.event async def on_ready(): print(f'我已登录为 {bot.user.name}(ID: {bot.user.id})') print('------------------------') # 同步Slash命令到所有服务器 try: synced_commands = await bot.tree.sync() print(f"成功同步了 {len(synced_commands)} 个Slash命令") except Exception as e: print(f"同步命令出错:{str(e)}") # 核心的解析邀请链接命令 @bot.tree.command( name="get_guild_info", description="输入Discord邀请链接,返回对应的服务器名称和ID" ) async def get_guild_info(interaction: discord.Interaction, invite_link: str): # 提取邀请码——兼容两种常见的链接格式:discord.gg/xxx 和 discord.com/invite/xxx invite_code = invite_link.split('/')[-1] # 验证链接格式是否合法 if 'discord.gg/' in invite_link or 'discord.com/invite/' in invite_link: try: # 获取邀请链接的详细信息 invite = await bot.fetch_invite(invite_code) # 发送结果给用户,用粗体和代码块美化格式 await interaction.response.send_message( f"✅ 找到服务器信息:\n名称:**{invite.guild.name}**\nID:`{invite.guild.id}`" ) except discord.NotFound: await interaction.response.send_message("❌ 无效的邀请链接,可能已过期或不存在!") except discord.Forbidden: await interaction.response.send_message("❌ 我没有权限访问这个邀请链接对应的服务器信息!") except Exception as e: await interaction.response.send_message(f"⚠️ 处理请求时出错:{str(e)}") else: await interaction.response.send_message("❌ 请输入有效的Discord邀请链接!") # 替换成你的机器人Token,记得保密! bot.run('YOUR_BOT_TOKEN_HERE')
代码解释
- 权限意图设置:
intents.message_content = True是必须的,不然机器人读不到用户输入的链接内容 - Slash命令同步:
bot.tree.sync()会把我们定义的命令同步到机器人所在的所有服务器,这样用户就能在聊天框里找到这个命令 - 邀请码提取:用
split('/')[-1]直接取链接最后一段,兼容两种常见的邀请链接格式 - 异常处理:覆盖了无效链接、权限不足、未知错误等情况,给用户明确的反馈
测试方法
- 运行代码,等控制台输出「成功同步了1个Slash命令」就说明机器人上线了
- 在Discord聊天框里输入
/get_guild_info,然后粘贴你的邀请链接(比如https://discord.gg/WxwgCQzW) - 发送后,机器人就会返回对应的服务器名称和ID啦!
注意事项
- 机器人只能获取公开邀请链接的服务器信息,如果是私有服务器的邀请链接(仅限特定用户加入的),机器人可能无法读取
- 一定要保管好你的Bot Token,绝对不能泄露到公共代码仓库或者分享给他人
- 如果你的服务器用的是Discord的「Community」模式,确保机器人的权限设置正确,不然可能无法正常响应命令
内容的提问来源于stack exchange,提问作者ליאור כהן




