Включение и выключение команды

Вот у меня есть код для автомодерации плохих слов

#Фильтр плохих слов
@bot.event
async def on_message(message):
    if message.author == bot.user: return # если сообщение от бота - игнорируем
    banwords = ["хуй", "блядина", "пизда", "пидр", "пидор", "пидар", "пидорас", "пидарас", "гандон", "сука", "даун", "дибил", "сучка", "ебать", "еблан", "ахуеть", "ебать", "нихуя", "пиздец", "блядь", "блять", "член", "залупа"]
    for word in banwords:
        if word in message.content.lower():
            try:
                await message.delete()
            except:
                pass
            await message.channel.send(f'{message.author.mention}, мат запрещен!')
            break

И я хочу сделать так, чтобы эту автомодерацию можно было включить либо выключить командой, по типу >auto_on и после этого автомодерация будет работать


Ответы (1 шт):

Автор решения: Forevor Base

P.S: Это было сложно, но я сделал это.

Здравствуйте, уважаемый halflite. Сейчас я вам попытаюсь максимально помочь, а так-же разъяснить, что надо сделать, что добавить, а что убрать.

Создаем главное условие вашей идеи.

Где угодно в коде добавляем такую вещь как: auto_moderation_on = 'true'. Это будет отвечать за нашу систему модерирования сообщений. Лично я поставил это перед кодом нашего ивента и команды.

Начинаем кодить @bot.event

В начале кода добавляем три вот таких строчки:

 if message.content.startswith('вашпрефиксздесь'): 
    await client.process_commands(message)`
 else:

Следующим действием я переместил список наших плохих слов перед проверкой на auto_moderation_on является True, или False. Вот как это выглядит:

    banwords = ["тут очень плохие слова!"]
    if banwordson == 'true':

Код, который у вас там, т.е. где бот пытается удалить сообщение оставляем таким-же, как и у нас было. Теперь в конце мы добавляем две строчки:

    elif banwordson == 'false':
        pass

Вот как будет выглядить наш @bot.event:

@bot.event
async def on_message(message):
 if message.content.startswith('lv.'): await client.process_commands(message)
 else:
    banwords = ["хуй", "блядина", "пизда", "пидр", "пидор", "пидар", "пидорас", "пидарас", "гандон", "сука", "даун", "дибил", "сучка", "ебать", "еблан", "ахуеть", "ебать", "нихуя", "пиздец", "блядь", "блять", "член", "залупа"]
    if banwordson == 'true':
        if message.author == bot.user: return
        for word in banwords:
            if word in message.content.lower():
                try:
                    await message.delete()
                except:
                    pass
                await message.channel.send(f'{message.author.mention}, мат запрещен!')
                break
    elif banwordson == 'false':
        pass

Создаем команду включения-и-выключения автоматической модерации сообщений.

Создаем нашу основу, впринципе это ничего обычного.

@bot.command(aliases=['automoder', 'moder', 'mat'])
@commands.has_role("ВнесиЗдесьРолиКоторыеМогутИспользоватьКоманды")
async def automoderation(ctx):

Далее мы добавляем такую вещь, как global auto_moderation_on. И теперь мы проверяем, если auto_moderation_on = True, то мы выключаем, а если наоборот, ну вы поняли.

@bot.command(aliases=['automoder', 'moder', 'mat'])
@commands.has_role("ВнесиЗдесьРолиКоторыеМогутИспользоватьКоманды")
async def automoderation(ctx):
 global banwordson
 if banwordson == 'true':
     await ctx.reply('Здравствуйте, уважаемый администратор! Выключаю автоматическую модерацию...')
     banwordson = 'false' 
 else:
     await ctx.reply('Здравствуйте, уважаемый администратор! ~~Выключаю~~ Включаю автоматическую модерацию...')
     banwordson = 'true'

Что у нас получается в итоге?

Теперь, вы можете включать и выключать автоматическую модерацию мата!

Полный код

banwordson = 'true'

@bot.event
async def on_message(message):
 if message.content.startswith('ваш префикс тут'): await client.process_commands(message)
 else:
    banwords = ["хуй", "блядина", "пизда", "пидр", "пидор", "пидар", "пидорас", "пидарас", "гандон", "сука", "даун", "дибил", "сучка", "ебать", "еблан", "ахуеть", "ебать", "нихуя", "пиздец", "блядь", "блять", "член", "залупа"]
    if banwordson == 'true':
        if message.author == bot.user: return
        for word in banwords:
            if word in message.content.lower():
                try:
                    await message.delete()
                except:
                    pass
                await message.channel.send(f'{message.author.mention}, мат запрещен!')
                break
    elif banwordson == 'false':
        pass

@bot.command()
async def automoderation(ctx):
 global banwordson
 if banwordson == 'true':
     await ctx.reply('Здравствуйте, уважаемый администратор! Выключаю автоматическую модерацию...')
     banwordson = 'false' 
 else:
     await ctx.reply('Здравствуйте, уважаемый администратор! ~~Выключаю~~ Включаю автоматическую модерацию...')
     banwordson = 'true' 

Спасибо за то, что дочитали до этого момента. Удачного вам вечера)

→ Ссылка