Python 比较列表
Python Compare lists
所以我有这个脚本,
good_users=[]
async def callposts(ctx):
g0=str(ctx.guild)
g=g0.replace(' ','_')
sqluse(g)
x="SELECT authorid, COUNT(*) FROM posts GROUP BY authorid"
mycursor.execute(x)
k=mycursor.fetchall()
for user in k:
if user[1] > 7:
good_users.append(user)
k.remove(user)
print(user)
return k
async def kick(ctx, uid):
await ctx.guild.kick(ctx.guild.get_member(int(uid)))
@client.command(pass_context = True)
async def post_check(ctx):
ausers=list(ctx.guild.members)
lowposters= await callposts(ctx)
for user in ausers:
if user == client.user:
print(user.name+" is a bot!")
ausers.remove(user)
elif user.id in exempt:
print(user.name+" is exempt!")
ausers.remove(user)
elif user.id in good_users:
print(user.name+" is a good user!")
ausers.remove(user)
else:
await kick(ctx,user.id)
print(ausers)
我在这里要做的是删除不活跃的用户。所以我有 2 个列表,我想将成员列表与豁免和 good_users 进行比较。我也在检查以确保它不是机器人。因此,此脚本会从列表中删除机器人,但不会删除豁免用户或良好用户。因此,它反过来会尝试踢掉所有不是机器人的人。 他们正试图接管!
我正在仔细查看,但现在我病了,所以不是 100%。
这些打印仅用于故障排除目的,但是,除了 callpost 函数中的第一个打印外,其他所有打印都没有打印任何内容,而且出于某种原因,那个打印只打印了用户,现在它没有打印机器人,所以机器人可能不是在要删除的列表中。
有什么想法吗?
您永远不会向 exempt_users
附加任何内容,并且由于 good_users
的范围,它只会填充 callposts()
内的用户,因为您在调用它时不会返回它在 post_check()
.
更改以下内容应该可以解决您的问题:
- Return good_users 来自 callposts()
- 在 post_check() 中调用 callposts() 的地方添加一个新变量,例如
lowposters, good_users = await callposts(ctx)
所以我终于弄明白了,脚本将 user.id 视为用户对象的属性。要解决这个问题,我必须使用
elif str(user.id) in exempt): and elif str(user.id) in good_users:
所以我有这个脚本,
good_users=[]
async def callposts(ctx):
g0=str(ctx.guild)
g=g0.replace(' ','_')
sqluse(g)
x="SELECT authorid, COUNT(*) FROM posts GROUP BY authorid"
mycursor.execute(x)
k=mycursor.fetchall()
for user in k:
if user[1] > 7:
good_users.append(user)
k.remove(user)
print(user)
return k
async def kick(ctx, uid):
await ctx.guild.kick(ctx.guild.get_member(int(uid)))
@client.command(pass_context = True)
async def post_check(ctx):
ausers=list(ctx.guild.members)
lowposters= await callposts(ctx)
for user in ausers:
if user == client.user:
print(user.name+" is a bot!")
ausers.remove(user)
elif user.id in exempt:
print(user.name+" is exempt!")
ausers.remove(user)
elif user.id in good_users:
print(user.name+" is a good user!")
ausers.remove(user)
else:
await kick(ctx,user.id)
print(ausers)
我在这里要做的是删除不活跃的用户。所以我有 2 个列表,我想将成员列表与豁免和 good_users 进行比较。我也在检查以确保它不是机器人。因此,此脚本会从列表中删除机器人,但不会删除豁免用户或良好用户。因此,它反过来会尝试踢掉所有不是机器人的人。 他们正试图接管!
我正在仔细查看,但现在我病了,所以不是 100%。
这些打印仅用于故障排除目的,但是,除了 callpost 函数中的第一个打印外,其他所有打印都没有打印任何内容,而且出于某种原因,那个打印只打印了用户,现在它没有打印机器人,所以机器人可能不是在要删除的列表中。
有什么想法吗?
您永远不会向 exempt_users
附加任何内容,并且由于 good_users
的范围,它只会填充 callposts()
内的用户,因为您在调用它时不会返回它在 post_check()
.
更改以下内容应该可以解决您的问题:
- Return good_users 来自 callposts()
- 在 post_check() 中调用 callposts() 的地方添加一个新变量,例如
lowposters, good_users = await callposts(ctx)
所以我终于弄明白了,脚本将 user.id 视为用户对象的属性。要解决这个问题,我必须使用
elif str(user.id) in exempt): and elif str(user.id) in good_users: