You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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. 运行代码,等控制台输出「成功同步了1个Slash命令」就说明机器人上线了
  2. 在Discord聊天框里输入 /get_guild_info,然后粘贴你的邀请链接(比如https://discord.gg/WxwgCQzW
  3. 发送后,机器人就会返回对应的服务器名称和ID啦!

注意事项

  • 机器人只能获取公开邀请链接的服务器信息,如果是私有服务器的邀请链接(仅限特定用户加入的),机器人可能无法读取
  • 一定要保管好你的Bot Token,绝对不能泄露到公共代码仓库或者分享给他人
  • 如果你的服务器用的是Discord的「Community」模式,确保机器人的权限设置正确,不然可能无法正常响应命令

内容的提问来源于stack exchange,提问作者ליאור כהן

火山引擎 最新活动