Antichrest
@Antichrest
I know only 3 thing: truth, lie and justice

Как сделать временный мут Telegram Aiogram?

В общем-то делаю бота-модератора для телеги. Появился вопрос, насчёт команды /mute. Просто мут выдаёт, а вот с временным траблы
Вот часть код команды:
# Mute
@dp.message_handler(commands = "mute")
async def mute(message: types.Message):
    if check_sub_channel(await bot.get_chat_member(chat_id = cfg.channel_id, user_id = message.from_user.id)):
        if message.from_user.id == cfg.admin1 or cfg.admin2 or cfg.admin3:
            await message.bot.restrict_chat_member(message.chat.id, message.reply_to_message.from_user.id, time.time()+600)
            await message.answer(f'*Пользователю запрещено право писать. Решение было принято @{message.from_user.username}*.\n_Функция размута ещё тестируется_')
        else:
            await message.reply("Ей, ей, ей. Ты походу что-то попутал. Тебе нельзя использовать эту команду ")
    else:
        await bot.send_message(message.from_user.id, cfg.not_sub_message)
  • Вопрос задан
  • 8623 просмотра
Решения вопроса 1
Antichrest
@Antichrest Автор вопроса
I know only 3 thing: truth, lie and justice
Ответ такой
@dp.message_handler(commands=['мут', 'mute'], commands_prefix='./', is_chat_admin=True)
async def mute(message):
      name1 = message.from_user.get_mention(as_html=True)
      if not message.reply_to_message:
         await message.reply("Эта команда должна быть ответом на сообщение!")
         return
      try:
         muteint = int(message.text.split()[1])
         mutetype = message.text.split()[2]
         comment = " ".join(message.text.split()[3:])
      except IndexError:
         await message.reply('Не хватает аргументов!\nПример:\n`/мут 1 ч причина`')
         return
      if mutetype == "ч" or mutetype == "часов" or mutetype == "час":
         dt = datetime.now() + timedelta(hours=muteint)
         timestamp = dt.timestamp()
         await bot.restrict_chat_member(message.chat.id, message.reply_to_message.from_user.id, types.ChatPermissions(False), until_date = timestamp)
         await message.reply(f' | <b>Решение было принято:</b> {name1}\n | <b>Нарушитель:</b> <a href="tg://user?id={message.reply_to_message.from_user.id}">{message.reply_to_message.from_user.first_name}</a>\n⏰ | <b>Срок наказания:</b> {muteint} {mutetype}\n | <b>Причина:</b> {comment}',  parse_mode='html')
      elif mutetype == "м" or mutetype == "минут" or mutetype == "минуты":
         dt = datetime.now() + timedelta(minutes=muteint)
         timestamp = dt.timestamp()
         await bot.restrict_chat_member(message.chat.id, message.reply_to_message.from_user.id, types.ChatPermissions(False), until_date = timestamp)
         await message.reply(f' | <b>Решение было принято:</b> {name1}\n | <b>Нарушитель:</b> <a href="tg://user?id={message.reply_to_message.from_user.id}">{message.reply_to_message.from_user.first_name}</a>\n⏰ | <b>Срок наказания:</b> {muteint} {mutetype}\n | <b>Причина:</b> {comment}',  parse_mode='html')
      elif mutetype == "д" or mutetype == "дней" or mutetype == "день":
         dt = datetime.now() + timedelta(days=muteint)
         timestamp = dt.timestamp()
         await bot.restrict_chat_member(message.chat.id, message.reply_to_message.from_user.id, types.ChatPermissions(False), until_date = timestamp)
         await message.reply(f' | <b>Решение было принято:</b> {name1}\n | <b>Нарушитель:</b> <a href="tg://user?id={message.reply_to_message.from_user.id}">{message.reply_to_message.from_user.first_name}</a>\n⏰ | <b>Срок наказания:</b> {muteint} {mutetype}\n | <b>Причина:</b> {comment}',  parse_mode='html')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
Сохраняй время в базе время когда у пользователя должен закончится мут и отдельным скриптом делай выборку у кого мут закончился на данный момент и выполняй команду с добавлением недостающих прав. Идеально раз в минуту.
Ответ написан
Ваш ответ на вопрос

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

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