【发布时间】: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