【发布时间】:2022-01-01 10:10:12
【问题描述】:
所以我的目标是为服务器中的每个成员提取角色列表并将它们存储在 MYSQL 数据库中。在我的机器人的后端。但是,当我尝试提取角色时,我得到 [none] 作为我的列表。所以我知道我做错了什么。我似乎无法解决它,所以我要求一些指针。
有点前言 我正在使用 SQLalchemy 和 pymysql,并重写了 discord.py。此代码也位于一个 cog 中。
她是故障码部分
@tasks.loop(hours=24)
# Runs every 24 hours to update tables
async def update_24(self):
print("Updating...")
async for guild in self.client.fetch_guilds():
Eng = create_engine(f'mysql+pymysql://{self.sql_user}:{self.sql_passwd}@{self.sql_host}/{guild.id}',
echo=False)
Engine = create_engine(f'mysql+pymysql://{self.sql_user}:{self.sql_passwd}@{self.sql_host}/{self.sql_ddb}',
echo=False)
async for member in guild.fetch_members():
member_id = member.id # Integer
displayName = member.display_name # String
discriminator = member.discriminator # String
mention = member.mention # String
server = guild.name # String
# update existing
User = discord.Member
_roles = member.roles # <== Trouble spot
roles = str(_roles)
print(f"Guild: {guild.name}, User: {member.name}, roles: {_roles}, {roles}")
dm = str(User.dm_channel)
dt = datetime.today()
date = dt
engine1 = create_engine(f'mysql+pymysql://{self.sql_user}:{self.sql_passwd}@{self.sql_host}/{guild.id}',
echo=False)
with Session(engine1) as session:
usr = Users()
UserExists = session.query(Users).filter_by(UserID=member.id).first()
if not UserExists:
usr.UserID = member_id
usr.DisplayName = displayName.encode(encoding='UTF-8')
usr.Discriminator = discriminator.encode(encoding='UTF-8')
usr.Mention = mention.encode(encoding='UTF-8')
usr.DMChannel = dm.encode(encoding='UTF-8')
# TODO: needs fixed, stores as property object (needs to be string or list of actual names of roles)
usr.Roles = roles.encode(
encoding='UTF-8')
usr.Server = server.encode(encoding='UTF-8')
usr.LastUpdate = date
session.add(usr)
session.commit()
session.close()
else:
session.query(Users).filter_by(UserID=member.id).update({
"DisplayName": displayName.encode(encoding='UTF-8'),
"Discriminator": discriminator.encode(encoding='UTF-8'),
"Mention": mention.encode(encoding='UTF-8'),
"DMChannel": dm.encode(encoding='UTF-8'),
"Roles": roles.encode(encoding='UTF-8'),
"PostCount": 0,
"LastUpdate": date
}, synchronize_session="fetch")
session.commit()
session.close()
我必须验证列表的打印语句的输出是:
Guild: Sinless Games Official Discord, User: Helix, roles: [None], [None]
Guild: Sinless Games Official Discord, User: Jessica Riley, roles: [None], [None]
Guild: Sinless Games Official Discord, User: Andrew Palermo, roles: [None], [None]
Guild: Sinless Games Official Discord, User: lilfizzle063, roles: [None], [None]
Guild: Sinless Games Official Discord, User: WidgetBot, roles: [None], [None]
我如何验证每个成员都有角色。根据文档,即使@everyone 角色也是默认的,并且总是首先出现,但我得到一个空列表。
【问题讨论】:
标签: sqlalchemy discord.py