【问题标题】:Convert discord username to member object将不和谐用户名转换为成员对象
【发布时间】:2020-02-18 16:37:29
【问题描述】:

我有以下脚本,

async def kick(ctx, u: discord.User):
    await client.kick(u)

它确实有pass_context=True,但那是在主要功能中。

这个脚本可以工作,但问题是它传递了一个带有作者 ID 的字符串(例如:johnwayne#345),该字符串是从数据库中提取的,而 kick 命令需要一个成员对象。

如何使用它来查找成员对象?

【问题讨论】:

    标签: python discord.py mysql-connector-python


    【解决方案1】:

    你确定u 只是一个字符串吗?我刚刚检查过,对我来说它正在传递一个用户对象。

    但是,我认为问题在于您没有正确调用 kick。你想调用 Guild.kick 或 Member.kick。我假设 client 是您的实际 botclient 并且没有 kick 命令。

    编辑:

    所以假设 kick 命令每次调用时都会以字符串形式接收成员的 id,则可以使用以下内容。您实际上不必传递u: discord.User,因为它只传递一个字符串。

    @client.command()   
    async def kick(ctx, id):
        await ctx.guild.kick(ctx.guild.get_member(int(id)))
    

    由于您在问题中提到您将他们的 id 保存在数据库中,但随后给出了他们的姓名示例,我将包括以下内容,以防您保存他们的姓名而不是实际的 User.id。

    @botclient.command()   
    async def kick(ctx, name):
        await ctx.guild.kick(ctx.guild.get_member_named(name))
    

    【讨论】:

    • 您是否将其保存到数据库然后查询?这是为了跟踪屡犯者。当它保存到数据库时,它只将 member.id 保存为字符串,然后当我查询它时,我只有字符串。
    • 啊,我错过了你问题的那一部分。如果您有id,则可以使用Guild.get_member(id) 获取成员对象。我会更新我的答案以包含它。
    • 我知道为什么查找不适用于 examplename#2342,即两个属性组合,名称和鉴别器。我重写了将所有内容都放入数据库的脚本。我现在存储用户 ID 和用户名。 (用户名只是以防我想手动在数据库中达到峰值。但是,现在我的 kick 命令不起作用,所以我将尝试您发布的第一个命令。看起来它应该可以解决问题!谢谢!
    猜你喜欢
    • 2019-08-06
    • 2021-11-19
    • 2021-07-05
    • 1970-01-01
    • 2011-11-03
    • 2021-09-15
    • 1970-01-01
    • 2023-03-06
    • 2019-08-20
    相关资源
    最近更新 更多