【问题标题】:discord.py - "member" argument always returns a string even when using the converter discord.Userdiscord.py - “member” 参数总是返回一个字符串,即使使用转换器 discord.User
【发布时间】:2021-04-27 21:46:26
【问题描述】:

正如标题中所说,我在 Moderation cog 中有一个静音函数,它接受一个成员参数,但是即使使用转换器,“member”最终还是一个看起来像“user#0000”的字符串。 Moderation 类的所有其他方法都将成员作为对象。这可能是什么原因造成的?

这里是静音():

@commands.command()
@commands.guild_only()
@commands.has_permissions(kick_members=True)
async def mute(self, ctx, member: discord.Member, *, reason="unspecified"):
    """"""
    try:
        await member.add_roles(self.get_role(ctx.guild.id, "muted_role"))
        await member.remove_roles(self.get_role(ctx.guild.id, "default_role"))

    except Exception as e:
        await ctx.send(f"**Error**: `{e}`")

    else:
        await ctx.send(f"{member.id} was muted.")

        if not self.get_channel(ctx.guild.id, "log_channel"):
            await ctx.send(self.no_log_chan)
            return

        await self.get_channel(ctx.guild.id, "log_channel").send(
            self.get_embed(
                "__MUTE__",
                ctx.message.author,
                "#00FF00",
                f"{member.id} was muted by {ctx.message.author} \nReason : *{reason}*",
                datetime.now().strftime("%H:%M:%S"),
                ctx.message.author.avatar_url,
            )
        )

这是我的 kick() 方法,效果很好:

@commands.command()
@commands.guild_only()
@commands.has_permissions(kick_members=True)
async def kick(self, ctx, member: discord.User, *, reason="unspecified"):
    """"""
    try:
        await ctx.guild.kick(member)

    except Exception as e:
        await ctx.send(f"**Error**: `{e}`")

    else:
        await ctx.send(f"{member.id} was kicked.")

        if not self.get_channel(ctx.guild.id, "log_channel"):
            await ctx.send(self.no_log_chan)
            return

        await self.get_channel(ctx.guild.id, "log_channel").send(
            self.get_embed(
                "__KICK__",
                ctx.message.author,
                "#00FF00",
                f"{member.id} was kicked from the server by {ctx.message.author} \nReason : *{reason}*",
                datetime.now().strftime("%H:%M:%S"),
                member.avatar_url,
            )
        )

【问题讨论】:

  • 嗨,你能解释一下它变成字符串是什么意思吗?就像你得到一个错误?如果是这样,那是什么?此外,一般来说,您不能将角色添加到 discord.User 对象,只能添加 discord.Member obj,用户不是特定于公会的。
  • 嗨!抱歉这么含糊,我收到一条错误消息"str" object has no attribute "id",例如打印成员让我收到“Mass#1111”。使用 discord.Member 时我仍然遇到这个问题
  • 只是一个专业提示:print 将您提供的内容转换为 str。转换为 str 的 User/Member obj 会产生 name#1234 格式。如果你尝试做 print(type(member)) 这会给你 str 吗?
  • 谢谢,我不知道,成员的类型实际上是 但现在该函数什么都不做,控制台也没有输出:/
  • 您使用 add_roles()remove_roles()User 类型。 User 类型没有这些方法。我想你的意思是使用discord.Member

标签: python discord.py


【解决方案1】:

直到最后一个版本,它的工作方式是这样的:

async def Function(ctx, member:discord.User):

希望有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2022-01-22
    • 2021-09-18
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多