Disord.py - 如何列出机器人所在的所有服务器?

时间:2021-06-03 10:08:18

标签: python list directory discord discord.py

我正在尝试这样做,以便我的机器人上线时,它会检查机器人所在的每台服务器,并在目录中为它们创建一个文件夹,但我一直收到错误 list2 未定义,即使已定义 iv这是代码:

import discord
from discord.ext import commands
import os

PREFIX = "$"
bot = commands.Bot(command_prefix=PREFIX, description="Hi")

list1 = os.listdir('C:/Users/User/Desktop/BOT_FOLDER')
for guild in bot.guilds:
    print(guild.name)
    list2 = guild.name


print(os.listdir('C:/Users/User/Desktop/BOT_FOLDER'))

set1 = set(list1)
set2 = set(list2)

missing = list(sorted(set1 - set2))
added = list(sorted(set2 - set1))

print('missing:', missing)
print('added:', added)

newpath = r'C:\Users\User\Desktop\BOT_FOLDER\{}'.format(added)
if not os.path.exists(newpath):
    os.makedirs(newpath)

if os.path.exists("demofile.txt"):
  os.remove('C:/Users/User/Desktop/BOT_FOLDER/{}').format(missing)
else:
  print("The file does not exist")

bot.run('BOT_TOKEN_HERE')

1 个答案:

答案 0 :(得分:1)

其实翻译是对的!即使看起来不像,当您运行 list2 时,也未定义 set2 = set(list2)


为什么会这样

您基本上是在 for guild in bot.guilds 对象初始化后立即调用 bot。但是,它尚未连接到 API,这意味着它尚未加载 bot.guilds 之类的内容。此属性将为 None,因此您的循环不会运行且 list2 不会被定义。


如何解决这个问题

等到您的机器人成功连接到 API,然后然后遍历您的公会。这可以通过使用 on_ready() 事件来完成。此外,您需要将 .append() 个项目添加到列表中,您不能只用等号分配新项目。

@bot.event
async def on_ready():
    list1 = os.listdir('C:/Users/User/Desktop/BOT_FOLDER')
    list2 = []
    for guild in bot.guilds:
        print(guild.name)
        list2.append(guild.name)


    print(os.listdir('C:/Users/User/Desktop/BOT_FOLDER'))

    set1 = set(list1)
    set2 = set(list2)

    missing = list(sorted(set1 - set2))
    added = list(sorted(set2 - set1))

    print('missing:', missing)
    print('added:', added)

    newpath = r'C:\Users\User\Desktop\BOT_FOLDER\{}'.format(added)
    if not os.path.exists(newpath):
        os.makedirs(newpath)

    if os.path.exists("demofile.txt"):
        os.remove('C:/Users/User/Desktop/BOT_FOLDER/{}').format(missing)
    else:
        print("The file does not exist")