我正在尝试这样做,以便我的机器人上线时,它会检查机器人所在的每台服务器,并在目录中为它们创建一个文件夹,但我一直收到错误 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')
答案 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")