Есть ли способ, которым я могу сделать автоматическое предупреждение и автоматическое удаление

#python-3.x #discord #discord.py-rewrite

#python-3.x #Discord #discord.py-переписать

Вопрос:

Ошибка: нет, потому что я не создал код / я не знаю, как создать код, код приведен ниже

  @bot.event
 async def on_message(message):
     test = 'test'
     if test in message.content.lower():
          await message.author.send('you have been warned for using "bad words" in the server')
 

Я хочу, чтобы мой код предупреждал пользователя 3 раза, а затем в 4-й раз бот пинает пользователя за написание теста на сервере, возможно ли это?

Комментарии:

1. Да, это возможно.

2. @NiettheDarkAbsol как?? Также убедитесь, что я использую Discord.py-rewrite

Ответ №1:

Вам нужно создать сопоставление идентификаторов пользователей с количеством предупреждений, которые они получали. Самый простой способ сохранить эту карту, пока бот отключен, — сохранить ее в файле JSON, хотя по мере масштабирования вашего бота вам в конечном итоге следует использовать базу данных.

 from discord.ext.commands import Bot
from json import load

bot = Bot("!")

try:
    with open("warns.json") as f:
        warns = load(f)
except:
    warns = {}

def should_warn(message):
    return 'test' in message.content.lower()

async def warn_or_kick(member):
    id = str(member.id)
    if id not in warns:
        warns[id] = 0
    warns[id]  = 1
    if warns[id] >= 4:
        await member.send("You have been kicked")
        await member.kick()
    else:
        await member.send(f"This is warning number {warn[id]}")
    with open("warns.json") as f:
        dump(warns, f)

@bot.event
async def on_message(message):
    if bot.user == message.author:
        return 
    if should_warn(message):
        await warn_or_kick(message.author)
    else:
        await bot.process_commands(message)

bot.run("TOKEN")
 

Комментарии:

1. Предположительно, тогда вы не сможете сохранять файлы надолго. В этом случае я бы рекомендовал использовать их службу базы данных, боюсь, я не знаю, как это работает.