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

如何通过名称获取Guild或遍历Guild名称直至匹配指定字符串?

按名称获取Discord Guild的实现

你可以封装一个独立函数来实现类似bot.get_guild(id)的按名称查询功能,同时处理可能的重名、未找到等情况,以下是完整实现:

基础精确匹配实现

def get_guild_by_name(bot, guild_name):
    # 遍历Bot加入的所有服务器,匹配精确名称
    matching_guilds = [guild for guild in bot.guilds if guild.name == guild_name]
    
    if not matching_guilds:
        return None  # 无匹配服务器时返回None
    elif len(matching_guilds) > 1:
        # 存在多个同名服务器时,可根据需求返回第一个或做其他处理
        return matching_guilds[0]
    else:
        return matching_guilds[0]

调用示例(结合你的交互逻辑)

target_guild = get_guild_by_name(bot, guildname)
if not target_guild:
    await interaction.response.send_message("Error: Guild not found.", ephemeral=True)
else:
    # 执行后续业务逻辑,比如获取服务器成员数、角色等
    await interaction.response.send_message(f"找到目标服务器:{target_guild.name}(ID:{target_guild.id})", ephemeral=True)

扩展匹配规则

如果需要更灵活的匹配方式,可以修改判断条件:

  • 忽略大小写匹配:
    matching_guilds = [guild for guild in bot.guilds if guild.name.lower() == guild_name.lower()]
    
  • 关键词模糊匹配(名称包含输入关键词):
    matching_guilds = [guild for guild in bot.guilds if guild_name.lower() in guild.name.lower()]
    

对你原有代码的优化点

  1. 封装为独立函数后更易复用,符合bot.get_guild的调用风格
  2. 增加了重名服务器的处理逻辑,避免因多个匹配项导致后续代码出错
  3. 返回None而非直接发送错误消息,让函数职责更单一(仅负责查询,错误处理交给调用方)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:30:53