【问题标题】:Discord.py - How can i kick user without ctx or member? - Solution hereDiscord.py - 我如何在没有 ctx 或成员的情况下踢用户? - 解决方案在这里
【发布时间】:2021-05-25 03:11:44
【问题描述】:
@pytest.mark.asyncio
async def timecheck():
    tm = time.localtime()
   
    if tm[6] == 6:
        user = await client.fetch_user(id)
        await user.kick(reason='Test')

@tasks.loop(seconds=60)
async def mainloop():
    asyncio.create_task(timecheck())


mainloop.start()

当我尝试运行机器人时,它给了我错误:

AttributeError: 'User' 对象没有属性 'kick

我试图查看 discord 文档,但命令不起作用,然后我尝试搜索它,但我找不到任何东西。

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    不要混淆usermember 对象!成员可以被踢,因为根据定义,他们是公会的成员。 User 只是一个普通的 Discord 用户,所以没什么可踢的。为了在没有事件处理程序提供的对象的情况下从公会中踢出成员,您需要像这样手动创建它们

    guild = client.get_guild(<guild-id>)
    member = guild.get_user(<user-id>)
    

    &lt;&gt; 括号内的内容显然必须替换为真实 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多