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

Discord.py如何列出机器人所在所有服务器?附代码报错排查

Discord机器人服务器文件夹自动同步修复方案

报错根因

  • 代码执行顺序错误:bot.run()是机器人启动的阻塞方法,你在启动前遍历bot.guilds时,机器人还未完成登录和服务器数据拉取,for循环不会执行,list2从未被赋值,因此触发未定义报错。
  • 变量定义逻辑错误:即使循环能执行,你每次都将list2覆盖为单个服务器名的字符串,而非存储所有服务器名的列表,后续转集合操作会把字符串拆分为单个字符,完全不符合需求。
  • 额外语法错误:路径格式化时format方法位置写反、直接用列表整体作为路径参数、删除逻辑的判断条件完全无关,都会导致后续功能报错。

修复后可运行代码

import discord
from discord.ext import commands
import os
import shutil

PREFIX = "$"
# 开启必要的意图权限,需要同时在Discord开发者后台开启对应开关
intents = discord.Intents.default()
intents.guilds = True
bot = commands.Bot(command_prefix=PREFIX, description="Hi", intents=intents)

# 所有上线后执行的逻辑要放在on_ready事件中
@bot.event
async def on_ready():
    folder_path = 'C:/Users/User/Desktop/BOT_FOLDER'
    # 读取本地已有的文件夹列表
    local_folders = os.listdir(folder_path)
    # 收集机器人加入的所有服务器名称
    guild_names = []
    for guild in bot.guilds:
        print(f"已加入服务器:{guild.name}")
        guild_names.append(guild.name)
    
    set_local = set(local_folders)
    set_guild = set(guild_names)
    
    # 本地有但机器人已退出的服务器文件夹
    missing_guilds = list(sorted(set_local - set_guild))
    # 机器人新加入、本地还没创建文件夹的服务器
    new_guilds = list(sorted(set_guild - set_local))
    
    print('需要删除的冗余文件夹:', missing_guilds)
    print('需要新增的服务器文件夹:', new_guilds)
    
    # 为新加入的服务器创建文件夹
    for guild_name in new_guilds:
        newpath = os.path.join(folder_path, guild_name)
        if not os.path.exists(newpath):
            os.makedirs(newpath)
    
    # 删除冗余的服务器文件夹
    for guild_name in missing_guilds:
        del_path = os.path.join(folder_path, guild_name)
        if os.path.exists(del_path):
            # 非空文件夹用shutil.rmtree删除,如果只需要删文件可替换为os.remove
            shutil.rmtree(del_path)
    
    print("文件夹同步完成")

bot.run('BOT_TOKEN_HERE')

注意事项

  • 必须在Discord开发者后台的机器人设置页,开启SERVERS MEMBERS INTENT权限,否则机器人无法拉取服务器列表。
  • 如果不需要自动删除冗余文件夹,可以删掉对应逻辑块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 19:27:09