【问题标题】:How can I make it so that the user does not remove mute role when re-entering the discord server?如何使用户在重新进入不和谐服务器时不会删除静音角色?
【发布时间】:2021-03-25 08:09:59
【问题描述】:

我为我的 discord.py 机器人创建了一个静音和取消静音命令,但是如果静音的成员重新进入,该角色将被删除,就好像他没有静音一样。我怎样才能使当你重新进入服务器时,它的角色在剩余的任期内一直由他担任?

import discord
from discord.ext import commands
import asyncio

intents = discord.Intents.default()
intents.members = True

bot = commands.Bot(command_prefix="/", intents = intents)

logchannel = bot.get_channel(**********)

@bot.command()
async def mute(ctx, member:discord.Member, time:int):
    muterole = discord.utils.get(ctx.guild.roles, id = *********)
    await member.add_roles(muterole)
    await asyncio.sleep(time * 60)
    if muterole in member.roles:
        await member.remove_roles(muterole)
        return
    else:
        return

@bot.command()
async def unmute(ctx, member:discord.Member):
    muterole = discord.utils.get(ctx.guild.roles, id = ******)
    if muterole in member.roles:
        await member.remove_roles(muterole)
        return
    else:
        return

【问题讨论】:

    标签: python discord.py


    【解决方案1】:

    有一个名为on_member_join 的事件会在成员每次加入公会时触发。一旦成员加入服务器,您可以使用此事件检查成员当前是否根据您的机器人静音。您必须以某种方式跟踪当前哪些成员被静音。

    以下是此代码可以工作的基本方式。我假设您可能可以使用列表作为存储用户静音的一种方式。这没有经过测试,但大致是应该发生的。

    import discord
    from discord.ext import commands
    import asyncio
    
    intents = discord.Intents.default()
    intents.members = True
    
    bot = commands.Bot(command_prefix="/", intents = intents)
    
    logchannel = bot.get_channel(**********)
    
    list_of_muted_members = []
    
    @bot.event
    async def on_member_join(member):
         if (member in list_of_muted_members): # Once someone joins the server, this event gets triggered and checks to see if the person is currently in the muted list, if they are, the muted role gets given back to them.
              muterole = discord.utils.get(member.guild.roles, name = "muterole")
              await member.add_roles(muterole)
    
    @bot.command()
    async def mute(ctx, member:discord.Member, time:int):
        muterole = discord.utils.get(ctx.guild.roles, id = *********)
        await member.add_roles(muterole)
        list_of_muted_members.append(member) # This will add the user to the list because they muted
    
        await asyncio.sleep(time * 60)
        if muterole in member.roles:
            await member.remove_roles(muterole)
            list_of_muted_members.remove(member) # This will remove the user from the list because they aren't muted anymore
            return
        else:
            return
    
    @bot.command()
    async def unmute(ctx, member:discord.Member):
        muterole = discord.utils.get(ctx.guild.roles, id = ******)
        if muterole in member.roles:
            await member.remove_roles(muterole)
            list_of_muted_members.remove(member) # This will remove the user from the list because they aren't muted anymore
            return
        else:
            return
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2021-01-05
      • 2021-01-16
      • 2021-09-20
      • 2020-12-21
      • 2021-07-06
      • 2021-10-19
      • 2021-11-23
      • 2021-03-31
      相关资源
      最近更新 更多