如何从Discord邀请链接中获取服务器名称?(disnake/discord.py)
使用disnake从Discord邀请链接提取服务器名称
完全可行,disnake(与discord.py在该功能上逻辑一致)提供了直接获取邀请信息的API,能轻松提取链接指向的服务器名称,具体实现如下:
实现步骤与代码
1. 提取邀请代码
首先需要从用户提交的邀请链接中剥离出核心的邀请代码,兼容常见的Discord邀请链接格式:
def extract_invite_code(link): # 匹配多种邀请链接前缀 prefixes = ('https://discord.gg/', 'https://discord.com/invite/', 'discord.gg/', 'discord.com/invite/') if link.startswith(prefixes): return link.split('/')[-1] # 若用户直接传入邀请代码,直接返回 return link
2. 获取服务器名称
通过disnake的bot.fetch_invite()方法获取邀请对象,从中提取服务器名称:
import disnake async def get_guild_name(bot, invite_link): invite_code = extract_invite_code(invite_link) try: invite = await bot.fetch_invite(invite_code) # 私密服务器或无效邀请可能无法获取guild对象 return invite.guild.name if invite.guild else "无法获取服务器名称(私密/无效邀请)" except disnake.NotFound: return "邀请链接已过期或不存在" except disnake.Forbidden: return "Bot无权限查看该服务器信息"
3. 调用示例(在bot的异步上下文内)
比如在一个 slash 命令中使用:
@bot.slash_command(name="get_guild", description="从邀请链接获取服务器名称") async def get_guild_command(inter, invite_link: str): guild_name = await get_guild_name(bot, invite_link) await inter.response.send_message(f"服务器名称:{guild_name}")
注意事项
- 必须在异步上下文(如bot的命令、事件回调)中调用上述函数,因为
fetch_invite是异步方法 - 确保你的Bot已被授予
guilds权限,否则可能无法正常获取服务器信息 - 对于已过期、无效或设置了严格隐私权限的邀请,会返回对应的提示信息,需做好异常处理
内容的提问来源于stack exchange,提问作者Kovirum
相关产品推荐
相关产品推荐

