10 неизвестных, но нужных фишек Telegram

В закладки

В данном случае разберем неочевидные возможности мессенджера Telegram, которые пригодятся продвинутым пользователям сервиса — каждому из вас.
1. Отключайте уведомления для диалогов и чатов
Как это сделать: нажмите на название чата и выберите возможность Mute
Таким образом можно как заглушить отдельных особо навязчивых пользователей мессенджера, так и скрыть уведомления от групповых чатов.
Возможность особенно актуальна при работе с каналами и ботами, которых у вас может собраться очень большое количество.

2. Узнавайте про доставку, прочтение сообщений
Как это сделать: следите за галочками возле отправленного сообщения
Все просто, одна галочка возле отправленного сообщения означает, что оно доставлено пользователю, две — уже прочитано им.
Теперь вас не смогут обмануть, что не видели сообщение.
3. Смените собственное имя для удобства поиска
Как это сделать: Settings — Username
Нормальный никнейм вместо номера мобильного телефона позволят другим пользователям гораздо проще находить вас в мессенджере.
Так как он в определенной степени направлен и на решение бизнес-вопросов, это окажется очень кстати.

4. Скройте от всех время доступности в онлайне
Как это сделать: Settings — Privacy and Security — Last Seen
Эта возможность поможет вам оградиться от лишних вопросов со стороны контактов из вашего мессенджера.
Представьте ситуацию, когда вы решили проигнорировать сообщение от кого-либо, сославшись на то, что были без доступа к интернету или просто не слышали уведомление.
Если видно время, когда вы в последний раз заходили в приложение, сделать это не получится.
5. Заходите в аккаунт не меньше раза в полгода
Как это сделать: Setting — Privacy and Security — Delete My Account
По-умолчанию, если вы не заходили в свой аккаунт в мессенджере больше полугода, система просто сотрет все ваши данные со своих серверов.
Но срок, после которого это произойдет, можно самостоятельно регулировать через настройки в мобильном приложении.

6. Закрепите чаты, диалоги для простоты поиска
Как это сделать: смахните справа налево по чату или диалогу и выберите возможность Pin
Таким образом самая важная переписка, каналы или боты окажутся в верхней части списка чатов и диалогов мессенджера.
При активном использовании приложения именно таким образом их проще всего найти для быстрого доступа.
7. Используйте чат с собой в собственных целях
Как это сделать: найдите себя по никнейму через поиск
Немногие знают, но с помощью этого мессенджера можно не только обмениваться самой разнообразной информацией, но и хранить ее для личного использования.
В диалог с самим собой можно сохранять важные сообщения и любую другую информацию, доступ к которой можно получить с абсолютно любого устройства.

8. Используйте хэштеги для поиска тематических
Как это сделать: добавляйте хэштеги к сообщениям в формате #test
Таким образом получится очень просто структурировать личные и рабочие сообщения в мессенджере.
При нажатии на один из хэштегов откроется специальное меню, в котором получится увидеть всю связанную с ним информацию — вот это очень удобно.
При этом хэштеги, которые вы используете в чате с самим собой, будут доступны для поиска только вам. А хэштеги, которые вы используете в общении со своими друзьями, будут доступны только участникам группы.
9. Удалите лишние диалоги из памяти устройства
Как это сделать: Settings — Data and Storage — Storage Usage
В этом меню можно выбрать конкретный диалог и очистить файлы и фотографии, которые сохранены в память устройства в его рамках.
Таким образом самые активные смогут ощутимо сократить занятое на устройстве место — избавиться от сотен мегабайт пространства, которое используется абсолютно бесполезно.

10. Следите за использованием мобильных данных
Как это сделать: Settings — Data and Storage — Network Usage
Российские операторы все быстрее и быстрее двигаются в сторону сокращения числа безлимитных интернет-тарифов и в итоге хотят просто отказаться от них.
В реалиях же украинского юга, где сам я провожу больше всего времени, безлимитных тарифов на мобильный интернет отродясь не было.
Поэтому возможность следить за используемым трафиком дорогого стоит.
Реализация мута пользователей в групповом чате — Telegram-Bot
Наша библиотека вновь обновлена, посему продолжим учиться создавать Телеграм-ботов. В сегодняшней статье поговорим о реализации системы мута пользователей.
Для понимания принципа работы нашей задумки — пройдёмся по изменениям в библиотеке и её новым возможностям. Изменения коснулись по сути только класса Bot. Итак, начинаем разбирать:
- Метод deleteMessage( $chat_id, $message_id ) — удаляет указанное сообщение
- $chat_id — айди чата
- $message_id — айди сообщения
public function deleteMessage( int $chat_id, int $message_id ) : void < $this->request( 'deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id ] ); >- Метод memberStatus( $chat_id, $user_id ) — возвращает роль пользователя в чате (может вернуть следующие значения: creator — создатель, left — админ, false — пользователь, null — пользователя нет в чате)
- $chat_id — айди чата
- $user_id — айди пользователя
public function memberStatus( int $chat_id, int $user_id ) : string|false|null < $member_info = $this->request( 'getChatMember', [ 'chat_id' => $chat_id, 'user_id' => $user_id ] ); return ( $member_info['result'] ? ( $member_info['result']['status'] == 'creator' ) ? 'creator' : ( $member_info['result']['status'] == 'left' ? 'left' : false ) : null ); >- Метод mute( $chat_id, $user_id, $unit, $value, $reason ) — мутит пользователя в чате на определённый срок, либо навсегда при неуказании времени
- $chat_id — айди чата
- $user_id — айди пользователя
- $unit — единица измерения времени — дни, часы, минуты, секунды (необязательный параметр)
- $value — срок мута в указанных единицах измерения времени (необязательный параметр)
- $reason — причина (необязательный параметр)
public function mute( int $chat_id, int $user_id, string $unit = '', int $value = 0, string $reason = '' ) : void < [ $arr, $mutes_file ] = $this->blacklistCache( 'mutes' ); $arr[$chat_id . '_' . $user_id] = [ 'duration' => $this->durationCount( $unit, $value ), 'reason' => $reason, ]; $this->record( $arr, $mutes_file ); >- Метод unMute( $chat_id, $user_id ) — размучивает пользователя в групповом чате
- $chat_id — айди чата
- $user_id — айди пользователя
public function unMute( int $chat_id, int $user_id ) : void < [ $arr ] = $this->blacklistCache( 'mutes' ); unset( $arr[$chat_id . '_' . $user_id] ); >- Метод isMuted( $chat_id, $user_id ) — проверяет, замучен ли пользователь (true — замучен, false— не замучен)
- $chat_id — айди чата
- $user_id — айди пользователя
public function isMuted( int $chat_id, int $user_id ) : bool < [ $arr ] = $this->blacklistCache( 'mutes' ); if ( isset( $arr[$chat_id . '_' . $user_id] ) and $arr[$chat_id . '_' . $user_id]['duration'] >= time() ) return true; return false; >- Метод blacklistCache( $type )— возвращает чёрный список пользователей (в нашем случае чёрным списком является список мутов, однако можно реализовать, к примеру, и баны)
- $type — тип чёрного списка (мы рассматриваем муты, поэтому в $type передавать будем строку ‘mutes’)
private function blacklistCache( string $type ) : array < if ( !is_dir( self::$cache_dir ) ) mkdir( self::$cache_dir ); $bans_file = self::$cache_dir . '/' . $type . '.php'; $arr = file_exists( $bans_file ) ? require $bans_file : []; return [ $arr, $bans_file ]; >- Метод durationCount( $unit, $value ) — высчитывает срок пребывания в чёрном списке (в муте) в зависимости от заданной единицы измерения времени (определяется по первой букве: д/d — дни, ч/h — часы, м/m — минуты, с/s— секунды)
- $unit — единица измерения времени — дни, часы, минуты, секунды
- $value — срок мута в указанных единицах измерения времени
private function durationCount( string $unit = '', int $value = 0 ) : int
- Метод record( $arr ) — перекочевал из класса Storage в класс Bot. Принцип работы не изменился, добавился второй аргумент (теперь путь к файлу можно указать вручную)
- $arr — массив для записи в кэш
protected function record( array $arr, string $path ) : false|int
Теперь переходим непосредственно к написанию бота. Создаём php-файл, подключаем библиотеку, создаём экземпляр класса Bot и инициализируем необходимые перменные:
initData( $data ) ->initChatId( $chat_id ) // Инициализируем айди чата, из которого поступают боту сообщения (например, это может быть айди пользователя, написавшего боту) ->initUserId( $user_id ) // Инициализация ID пользователя ->initMessage( $message ); // Инициализируем текст сообщения, которе было отправлено ботуМы уже рассмотрели метод isMuted(), поэтому теперь смело можем его применять. А применять мы его будем для того, чтобы удалять сообщения юзеров, которые были замучены:
if ( $tg->isMuted( $chat_id, $user_id ) ) < $tg->deleteMessage( $chat_id, $data['message']['message_id'] ); >Теперь все сообщения от заткнутых пользователей бот будет автоматически подчищать.
Далее переходим к реализации самого мута. Чтобы такая привилегия была исключительно у администраторов — проверяем роль пользователя, который ввёл команду, с помощью метода memberStatus():
else if ( str_starts_with( $message, '/' ) ) < if ( $tg->memberStatus( $chat_id, $user_id ) ) < // Тут продолжим писать код >>Условие выполнится только если будет возвращена строка (creator или left). Напомню, что для обычных пользователей возвращается false.
Теперь, когда проверка пройдена — можно раздробить команду на части через пробелы и далее обработать её:
$message_data = explode( ' ', $message ); switch ( $message_data[0] ) < case '/мут': < $tg->mute( $chat_id, $data['message']['reply_to_message']['from']['id'], $message_data[2], $message_data[1], $message_data[3] ?? '' ); $tg->reply( 'Пользователь заткнут' ); break; > case '/размут': < $tg->unMute( $chat_id, $data['message']['reply_to_message']['from']['id'] ); $tg->reply( 'Пользователь размучен' ); break; > >И на этом, пожалуй, всё

- 5id15
- 01.09.2022
- 7 576
- 1
- 77
Silence or Mute Notifications.

Silence or Mute Notifications. Disable alert sounds from a chat or turn off notifications completely.
Select ‘Mute for’ on Android or ‘Mute until’ on iOS to set a custom mute duration – pausing notifications for a specific period.
You can also quickly mute chats from your chat list.
Как мутить (mute) человека, если он спамит в Telegram?
Ищу документацию про мут. Если человек шлет более 3 сообщений за 5 секунд, как сделать проверку таких таймингов сообщений?
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 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
383 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