首页 > 解决方案 > 当静音用户离开服务器并重新加入时,如何保持静音角色?

问题描述

我正在开发一个 discord.py 机器人,但我发现了一个问题。当静音用户离开服务器并重新加入时,该用户的静音角色将消失。

这是我的静音/取消静音命令:

@bot.command()
@commands.has_permissions(manage_messages=True)
async def mute(ctx, member:discord.Member, *, reason=None):
      guild = ctx.guild
      mutedRole = discord.utils.get(guild.roles, name="Muted")    
      await member.add_roles(mutedRole, reason=reason)

      embed=discord.Embed(title="Muted.")
      embed.add_field(name="Muted.", value=(f"Muted {member.mention} for reason {reason}"))                     
      await ctx.send(embed=embed)
      await member.send(f"You were muted in the server {guild.name} for {reason}")
      list_of_muted_members.append(member)
      print(list_of_muted_members)

@bot.command(description="Unmutes a specified user.")
@commands.has_permissions(manage_messages=True)
async def unmute(ctx, member: discord.Member, reason=None):
      mutedRole = discord.utils.get(ctx.guild.roles, name="Muted")

      embed=discord.Embed(title="You have been unmuted.")
      embed.add_field(name="Unmuted.", value=(f"Unmuted {member.mention} Reason: {reason}"))
      await ctx.send(embed=embed)
      await member.remove_roles(mutedRole)
      await member.send(f"You were unmuted in the server {ctx.guild.name}")

标签: pythondiscord.py

解决方案


一种方法是将当前静音的用户存储在 .json 文件中,然后您可以在用户重新加入服务器时引用该文件。

{
   "USERID": true
}

然后你可以:

with open('JSONFILE.json', 'r') as f:
  jsonfile = json.load(f)
  try:
     status = jsonfile[str(user.id)]
     if status:
        # add role to member
  except:
     # user wasn't found in json
     return

推荐阅读