Загрузка...

Уведомления о событиях в канале Telegram (например, новые/вышедшие участники)

Тема в разделе Python создана пользователем MALWARE 21 окт 2022. (поднята 8 июн 2025 в 15:36) 2760 просмотров

Загрузка...
  1. MALWARE
    MALWARE Автор темы 21 окт 2022 мяукаю 11 484 12 мар 2021
    Такого бота я нигде не видел. Думаю, администраторам мелких-средних каналов будет очень полезно, так же как и мне.
    Протестируем на t.me/immalware ?)

    Python
    import json
    from os.path import isfile
    from time import sleep

    from telethon.sync import TelegramClient

    config = {
    'tg_api_id': '12345',
    'tg_api_hash': '3f46s5c7z65875084f39z8d8v89174',
    'channel_id': '-1001853994420',
    'notifications_chat_id': 657195904,
    'bot_token': '12345678:AdfwtKwyBycRyj97JPfd9I',
    'refresh_rate': '5'
    }

    if not isfile('session.session'): print('Войдите от имени администратора канала, у которого есть доступ к журналу событий')
    telegram = TelegramClient('session', config['tg_api_id'], config['tg_api_hash']).start()
    bot = TelegramClient('bot', config['tg_api_id'], config['tg_api_hash']).start(bot_token=config['bot_token'])
    if not isfile('aln_data.malw'):
    with open('aln_data.malw', 'w') as file:
    file.write('[]')
    data = []
    else:
    with open('aln_data.malw', 'r') as file:
    data = json.loads(file.read())

    while True:
    events = reversed(list(telegram.get_admin_log(entity=int(config['channel_id']), info=False, settings=False, pinned=False, edit=False, delete=False, group_call=False)))
    for event in events:
    if event.id in data: continue
    event2 = event.action.to_dict()
    try:
    if event2['_'] == 'ChannelAdminLogEventActionParticipantJoinByInvite':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') вступил в канал по ссылке '+event2['invite']['link'], parse_mode='markdown')
    elif event2['_'] == 'ChannelAdminLogEventActionParticipantInvite':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') пригласил ['+telegram.get_entity(event2['participant']['user_id']).first_name+'](tg://user?id='+str(event2['participant']['user_id'])+') в канал', parse_mode='markdown')
    elif event2['_'] == 'ChannelAdminLogEventActionParticipantJoin':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') подписался на канал!', parse_mode='markdown')
    elif event2['_'] == 'ChannelAdminLogEventActionParticipantLeave':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') покинул канал', parse_mode='markdown')
    elif event2['_'] == 'ChannelAdminLogEventActionParticipantToggleAdmin':
    if event2['prev_participant']['_'] == 'ChannelParticipant' and event2['new_participant']['_'] == 'ChannelParticipantAdmin':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event2['new_participant']['promoted_by']).first_name+'](tg://user?id='+str(event2['new_participant']['promoted_by'])+') назначил пользователя ['+telegram.get_entity(event2['new_participant']['user_id']).first_name+'](tg://user?id='+str(event2['new_participant']['user_id'])+') администратором')
    elif event2['prev_participant']['_'] == 'ChannelParticipantAdmin' and event2['new_participant']['_'] == 'ChannelParticipant':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') разжаловал пользователя ['+telegram.get_entity(event2['new_participant']['user_id']).first_name+'](tg://user?id='+str(event2['new_participant']['user_id'])+'), он больше не администратор')
    elif event2['prev_participant']['_'] == 'ChannelParticipantAdmin' and event2['new_participant']['_'] == 'ChannelParticipantAdmin':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') отредактировал права администратора ['+telegram.get_entity(event2['new_participant']['user_id']).first_name+'](tg://user?id='+str(event2['new_participant']['user_id'])+')')
    elif event2['_'] == 'ChannelAdminLogEventActionParticipantToggleBan':
    if event2['prev_participant']['_'] == 'ChannelParticipantBanned' and event2['new_participant']['_'] == 'ChannelParticipantLeft':
    bot.send_message(config['notifications_chat_id'], ''+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') разблокировал пользователя ['+telegram.get_entity(event2['new_participant']['peer']['user_id']).first_name+'](tg://user?id='+str(event2['new_participant']['peer']['user_id'])+')')
    elif event2['prev_participant']['_'] == 'ChannelParticipant' and event2['new_participant']['_'] == 'ChannelParticipantBanned':
    bot.send_message(config['notifications_chat_id'], '⛔'+'['+telegram.get_entity(event.user_id).first_name+'](tg://user?id='+str(event.user_id)+') заблокировал пользователя ['+telegram.get_entity(event2['new_participant']['peer']['user_id']).first_name+'](tg://user?id='+str(event2['new_participant']['peer']['user_id'])+')')
    data.append(event.id)
    except Exception as e:
    print(e)
    bot.send_message(config['notifications_chat_id'], 'Произошла ошибка :(\nСобытие: '+json.dumps(event2)+'\nОшибка: '+str(e))
    with open('aln_data.malw', 'w') as file:
    file.write(json.dumps(data))
    sleep(int(config['refresh_rate']))

    Заполняем конфиг
    api_id и api_hash берем здесь https://my.telegram.org
    Чтобы узнать ID канала, нужно переслать любое сообщение из него боту https://t.me/myidbot
    [IMG]
    С помощью того же бота можно узнать свой ID, командой /getid, для notifications_chat_id
    Токен бота, думаю, знаете, где брать
    refresh_rate - раз в сколько секунд бот будет обновлять журнал действий в канале.

    Для работы бота требуется войти в аккаунт пользователя-администратора, у которого есть доступ к журналу действий! От имени пользователя-администратора будет выполняться только просмотр журнала активности. Отправка сообщений будет именно от бота.

    [IMG]
    [IMG]
    [IMG]
    [IMG]
    [IMG]
    [IMG]
    [IMG]
    [IMG]
    [IMG]
     
    21 окт 2022 Изменено
  2. FSUGEE
    f строки придумали в 2663 году до н.э., малварь сейчас:

    а так бот полезный, снова имба:smile_victory:
     
    1. Denissikd
      FSUGEE, слабость для сильных. Запомни это :kek:
  3. derkown
    а еще можно **** канала смотреть и оттуда получать инфу, это кста намного легче чем ты делаешь
     
    1. MALWARE Автор темы
      derkown, можно, но бот уведомляет как раз о новых логах
    2. derkown
      MALWARE, так сделать простую проверку на новый лог, и все
    3. MALWARE Автор темы
      derkown, это она и есть эм)
  4. telegaBOT
    telegaBOT 22 окт 2022 12 28 авг 2021
    Это как в групхелпе бесплатном есть, журнал действий называется
     
    1. def
      telegaBOT, тут это не причем, есть кодеры, есть юзеры, кто-то делает для себя, кто-то юзает что есть, захотел он написать, написал :wutcat:
  5. ZeN
    ZeN 25 ноя 2022 2104 28 авг 2019
    разве ботам в тг не приходят для этого отдельные события?
     
    1. Посмотреть предыдущие комментарии (1)
    2. ZeN
      derkown, оно должно прилетать в этот хендлер. и еще нужно добавить этот тип события ("chat_member"), в аргумент allowed_updates при запуске поллинга
    3. MALWARE Автор темы
      ZeN, не приходят
    4. ZeN
      MALWARE, [IMG]
      очень даже приходят, поэтому не понимаю к чему тут юзербот
  6. K1p1k
    K1p1k 15 янв 2023 22 1 июл 2022
    Что за бот в тг
     
  7. SMSKA
    SMSKA 13 мар 2023 я постиронист, рил 864 23 сен 2021
    Это бесполезный бот, эту фичу никак не применить на практике, если вдруг и нужно будет посмотреть определённого человека, то есть ****.
     
    1. MALWARE Автор темы
      SMSKA, а если ты хочешь видеть, кто на твой канал подписался/отписался в виде уведомлений, ты будешь каждый час проверять ****?
    2. SMSKA
      MALWARE, в чём просто смысл этого бота? Ты понимаешь что в ленте бота где будут складываться сабы и ансабы, не будет видно общей картины, насколько вырос/упал канал в количестве сабов. Для этого в тг есть статистика и **** в каналах. Смысл бота нулевой.
    3. MALWARE Автор темы
      SMSKA, общая картина и статистика нужна для крупных каналов. А мой бот - для мелких.
  8. XXXEVEXXX
    XXXEVEXXX 12 апр 2023 ... 265 3 фев 2020
    Нет слов одни эмоции
     
  9. Nikoo
    Nikoo 20 авг 2024 0 8 авг 2024
    Годно
     
  10. Unblock
    Unblock 17 апр 2025 дед инсайдик - хуесосить можно на стенке :ok_lol::animeaww: 5714 7 май 2019
    Земля круглая, как поймаю сразу

    А так годная статейка
     
    1. MALWARE Автор темы
      ?
    2. Unblock
      MALWARE, в голове крутилось чисто написал
  11. Crimson
    Crimson 13 май 2025 1170 13 авг 2019
    Python
    if not isfile('session.session'): print('Войдите от имени администратора канала, у которого есть доступ к журналу событий')
    Строчек жалко?
     
Top