不要混淆user 和member 对象!成员可以被踢,因为根据定义,他们是公会的成员。 User 只是一个普通的 Discord 用户,所以没什么可踢的。为了在没有事件处理程序提供的对象的情况下从公会中踢出成员,您需要像这样手动创建它们
guild = client.get_guild(<guild-id>)
member = guild.get_user(<user-id>)
<> 括号内的内容显然必须替换为真实 ID。
如果你的机器人没有缓存公会或成员,你将需要获取它们
guild = await client.fetch_guild(<guild-id>)
member = await guild.fetch_member(<user-id>)
然后您可以使用此信息来踢该成员
@pytest.mark.asyncio
async def timecheck():
tm = time.localtime()
if tm[6] == 6:
guild = await client.fetch_guild(guildID)
member = await guild.fetch_member(userID)
await member.kick(reason='Test')
@tasks.loop(seconds=60)
async def mainloop():
asyncio.create_task(timecheck())
mainloop.start()
如果您不确定 fetch 函数是否会始终返回对象,您还可以检查它们是否不是 None 以避免任何错误
@pytest.mark.asyncio
async def timecheck():
tm = time.localtime()
if tm[6] == 6:
guild = await client.fetch_guild(guildID)
if guild != None:
member = await guild.fetch_member(userID)
if member != None:
await member.kick(reason='Test')
@tasks.loop(seconds=60)
async def mainloop():
asyncio.create_task(timecheck())
mainloop.start()