Goshujin
@Goshujin
Я только начал изучать Python, не бейте.

Как сделать логи банов?

Нужно сделать файл в который бот будет записывать забаненных юзеров, и даже после рестарта знал что ему нужно разбанить его через указанное время, на данный момент бот умеет только это:
@Bot.command()
@commands.has_permissions(administrator = True)
async def ban(ctx,member:discord.Member,time:int,reason):
    await ctx.channel.purge(limit = 1)
    emb = discord.Embed(title=f"{member.display_name}#{member.discriminator} Был забанен с сервера.", color=0xff0000)
    emb.add_field(name="Модератор",value=ctx.message.author.mention)
    emb.add_field(name="Пользователь",value=member.mention)
    emb.add_field(name="Причина",value=reason)
    emb.set_thumbnail(url="https://i.imgur.com/K2GwJCd.png")
    emb.add_field(name="Длительность блокировки (Минут)",value=time)
    await ctx.send(embed = emb)
    await member.ban()
    await asyncio.sleep(time * 60)
    emb = discord.Embed(title=f"{member.display_name}#{member.discriminator} Был разбанен по истечению времени блокировки.", color=0xff0000)
    await ctx.send(embed = emb)
    await member.unban()
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev Куратор тега Python
software engineer
@davGro
Шушуть люблю питон, по шушуть тыкаю где-то год.
Лучше не хранить ничего в файлах, а создать таблицу в бд с колонками banTimeStart memberUid reason authorOfBan duration и channel.

banTimeStart это int(time.time()) на момент внесения записи в таблицу.
Можно удалять разбаненых из таблицы, а можно добавить столбец unbanned где будет 0 если человек ещё в бане и 1 если человек разбанен.
Каждую минуту (или чаще, на ваше усмотрение) делать запрос в базу на подобии
from time import time
...
cursor.execute("""SELECT memberUid, channel from bans where banTimeStart + duration <= {0}""".format(int(time()))

Данный запрос будет выводить данные о забаненных, чье время бана уже истекло
Ответ написан
KIRIK12
@KIRIK12
А не проще в опциях бана задать время бана с помощью встроенной функции?
Документация
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы