Как сделать так, чтобы пользователь не удалял mute роль при повторном входе на дискорд сервер?

Я создал команду отключения и включения звука для своего бота 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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
256
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Другие вопросы по теме