Как мутить (mute) человека, если он спамит в Telegram?
Ищу документацию про мут. Если человек шлет более 3 сообщений за 5 секунд, как сделать проверку таких таймингов сообщений?
Отслеживать
13.8k 12 12 золотых знаков 43 43 серебряных знака 76 76 бронзовых знаков
задан 23 авг 2021 в 20:00
Feel Richi Feel Richi
29 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Все что тебе понадобится так это библиотека datetime и telebot. У меня есть одно решение мы просто будем получать дату отправки сообщений message.date() получаем время в unix формате затем его переводим в обыкновенно(человеческое), достаем от туда секунды затем проверяем количество сообщений отправленных в определенный промежуток времени и если за пять секунд у нас более чем три сообщения то мутим его с помощью: bot.restrict_chat_member(message.chat.id, message.from_user.id, until_date= [сюда время мута]) , вот как я вижу решение этой задачки.
Отслеживать
ответ дан 24 авг 2021 в 8:31
Alex alexeev Alex alexeev
380 1 1 серебряный знак 11 11 бронзовых знаков
чтобы получить секунды в рф времени можно просто написать from datetime import datetime import pytz seconds = datetime.now(pytz.timezone(‘Europe/Moscow’)).strftime(‘%S’) print(seconds)
27 авг 2021 в 6:43
В aiogram решили данную задачу через добавление middleware с leaky bucket.
import asyncio from aiogram import Bot, Dispatcher, executor from aiogram.contrib.fsm_storage.redis import RedisStorage2 from aiogram.dispatcher import DEFAULT_RATE_LIMIT from aiogram.dispatcher.handler import CancelHandler, current_handler from aiogram.dispatcher.middlewares import BaseMiddleware from aiogram.types import Message from aiogram.utils.exceptions import Throttled TOKEN = "BOT_TOKEN_HERE" bot = Bot(token=TOKEN) storage = RedisStorage2() dp = Dispatcher(bot, storage=storage) def rate_limit(limit: int, key=None): """Decorator for configuring rate limit and key.""" def decorator(func): setattr(func, "throttling_rate_limit", limit) if key: setattr(func, "throttling_key", key) return func return decorator class ThrottlingMiddleware(BaseMiddleware): def __init__(self, limit=DEFAULT_RATE_LIMIT, key_prefix="antiflood_"): self.rate_limit = limit self.prefix = key_prefix super(ThrottlingMiddleware, self).__init__() async def on_process_message(self, message: Message, data: dict): handler = current_handler.get() dispatcher = Dispatcher.get_current() if handler: limit = getattr(handler, "throttling_rate_limit", self.rate_limit) key = getattr( handler, "throttling_key", f"_" ) else: limit = self.rate_limit key = f"_message" try: await dispatcher.throttle(key, rate=limit) except Throttled as t: await self.message_throttled(message, t) raise CancelHandler() async def message_throttled(self, message: Message, throttled: Throttled): handler = current_handler.get() dispatcher = Dispatcher.get_current() if handler: key = getattr( handler, "throttling_key", f"_" ) else: key = f"_message" delta = throttled.rate - throttled.delta if throttled.exceeded_count
whoa there, pardner!
Your request has been blocked due to a network policy.
Try logging in or creating an account here to get back to browsing.
If you're running a script or application, please register or sign in with your developer credentials here. Additionally make sure your User-Agent is not empty and is something unique and descriptive and try again. if you're supplying an alternate User-Agent string, try changing back to default as that can sometimes result in a block.
You can read Reddit's Terms of Service here.
if you think that we've incorrectly blocked you or you would like to discuss easier ways to get the data you want, please file a ticket here.
when contacting us, please include your ip address which is: 178.175.141.248 and reddit account
Перевод "unmute" на русский
Сегодня утром Франсуа Бофор объявил о добавлении новой функции, отметив, что команда Chrome по-прежнему «экспериментирует с настройкой, чтобы отключить веб-сайт прямо из окна информации о странице.
Not all users have the same preferences for autoplay media, so Google has looked at letting users mute and unmute entire websites.
Не все пользователи имеют одинаковые предпочтения для файлов автозапуска, поэтому Google посмотрел, что позволяет пользователям отключать звук и включать все веб-сайты.
With the push of a button participants can switch between content from any screen, projector or television; mute and unmute microphones, pan, tilt, or zoom cameras during a video conference, connect to videos and audio calls and much more.
При нажатии кнопки участники могут переключаться между контентом с любого экрана, проектора или телевизора; приглушать и включать микрофоны, панорамировать, наклонять или масштабировать камеры во время видеоконференции, подключаться к видео и звуковым вызовам и многое другое.
whoa there, pardner!
Your request has been blocked due to a network policy.
Try logging in or creating an account here to get back to browsing.
If you're running a script or application, please register or sign in with your developer credentials here. Additionally make sure your User-Agent is not empty and is something unique and descriptive and try again. if you're supplying an alternate User-Agent string, try changing back to default as that can sometimes result in a block.
You can read Reddit's Terms of Service here.
if you think that we've incorrectly blocked you or you would like to discuss easier ways to get the data you want, please file a ticket here.
when contacting us, please include your ip address which is: 178.175.141.248 and reddit account