Загрузка...

[Telegram + Python] Меняем эмодзи статус налету

Тема в разделе Python создана пользователем json 6 июл 2024. (поднята 28 апр 2025) 749 просмотров

Загрузка...
  1. json
    json Автор темы 6 июл 2024 :lol: 1443 13 янв 2023
    Многие люди используют эмодзи статус в телеграмме для обозначения статуса их работы
    Будь это свободен, занят или готов ответить
    Я тоже решил начать это делать и без заморочек сделать скрипт для автоматики...


    Итак...

    Всем привет!
    Сегодня напишем простой, но полезный скрипт
    Многие люди, у который взаимодействие с клиентами происходит в ТГ пользуются эмодзи статусами для обозначения их статуса (тавтология :da: )
    К примеру, есть крутой кодер и ему пишет 100500 людей в день. У него есть определенный график работы в профиле, но всем по**й на это.
    Для этого он делает вступительное сообщение с обозначением всех статусов и люди начинают обращать на это внимание.
    Но вот незадача! Каждый раз менять вручную статус - не лучшее решение.
    Мы напишем софт, который будет отслеживать клавиши и ставить нужный статус​
    Т.к. лично я перескакиваю с Windows на Linux, я буду использовать кроссплатформенную библиотеку для обработки клавиш keyboard
    Для работы с ТГ - Pyrogram
    А для работы внутри проекта предпочитаю Poetry.​
    Вам необходимо установить Poetry для удобной работы с пакетами и виртуальными окружениями
    Код
    pip3 install poetry
    После чего, в вашей папке, где будете хранить проект, введите
    Код
    poetry init
    Там по инструкции следует все ввести, где спрашивает про библиотеки, вводите варианты, которые ввел выше.
    Вот такой pyproject.toml у меня вышел​
    Код
    [tool.poetry]
    name = "telegramstatusprogram"
    version = "0.1.0"
    description = ""
    authors = ["Ivan********* *******@gmail.com>"]
    readme = "README.md"

    [tool.poetry.dependencies]
    python = "^3.11"
    keyboard = "^0.13.5"
    Pyrogram = "^2.0.106"


    [build-system]
    requires = ["poetry-core"]
    build-backend = "poetry.core.masonry.api"
    Для замены статуса у аккаунты в API Телеграма есть метод
    Т.к мы пишем все на Pyrogram, можно узнать, какая функция кидает на данный метод запрос
    Python
    from pyrogram import types

    await app.set_emoji_status(types.EmojiStatus(custom_emoji_id=1234567890987654321))

    Вот вам и самая главная функция.

    Для создания app, вам требуется класс Client, который выступает самим клиентом ТГ
    Вот код который я написал для инициализации клиента
    Python
    from pyrogram import Client, types

    app = Client(
    name="StatusSwitcher",
    api_id=12345, # Сюда вы вставляете свой API_ID
    api_hash="cjndsjkcnksndcjknskcd" # Сюда API_HASH
    )
    Забыл) Для получения этих данный вам требуется зайти на https://my.telegram.org/ и там будут ваши данные

    Я написал главный функционал, вот так все выглядит​
    Python
    from pyrogram import Client, types # импорт библиотек

    BUSY = 12345 # айди эмодзи занятости
    WORK = 23456 # айди эмодзи работы
    FIFTY_FIFTY = 88388 # айди эмодзи 50/50 работы

    app = Client(
    name="StatusSwitcher",
    api_id=12345, # Сюда вы вставляете свой API_ID
    api_hash="cjndsjkcnksndcjknskcd" # Сюда API_HASH
    ) # создаем объект класса

    async def switch_emoji(emoji_id: int): # функция для установки статуса
    await app.set_emoji_status(
    types.EmojiStatus(custom_emoji_id=emoji_id)
    )
    Самое важное я написал. Приступим к получению ID эмодзи​
    Это покажется пиздец как костыльно, но метод рабочий
    Лично я решил сделать бота и написать ему все нужные эмодзи и дернуть по запросу данные сообщения
    [IMG]
    Ниже находится токен бота

    Для получения обновлений бота, есть запрос, который можно прям из браузера вытащить​


    Отправил эмодзи и получил все айдишники
    Есс... Айди эмодзи находятся по порядку

    Замените айди в коде​
    Я поменял ID, стартанул клиент и вызвал функцию​
    Python
    from pyrogram import Client, types
    import asyncio

    BUSY = 5339233635620899144 # айди эмодзи занятости
    WORK = 5339135753316222622 # айди эмодзи работы
    FIFTY_FIFTY = 5339286072876614251 # айди эмодзи 50/50 работы

    app = Client(
    name="StatusSwitcher",
    api_id=26, # Сюда вы вставляете свой API_ID
    api_hash="свыотсолтылотслоыт" # Сюда API_HASH
    )
    app.start()
    def switch_emoji(emoji_id: int):
    app.set_emoji_status(
    types.EmojiStatus(custom_emoji_id=emoji_id)
    )

    switch_emoji(BUSY)
    Уже супер! Статус меняется и можно прикручивать нажатие клавиш!​
    Библиотека keyboard имеет несколько методов распознавания нажатия​
    Python
    import keyboard

    # Делаем жосткий хоткей
    keyboard.add_hotkey('space', lambda: print('space was pressed!'))

    keyboard.wait()

    # Ожидаем нажатие
    keyboard.wait('space')
    print('space was pressed! Waiting on it again...')

    # Самый нормальный в использовании с асинхроном

    if keyboard.is_pressed("alt+space"):
    print("alt n' space")
    Ну и соответственно я выбрал последний вариант и написал функцию main()​
    Python
    async def main():
    await app.start() # Стартует наш клиент
    while True: # Запускаем цикл
    if keyboard.is_pressed("alt+shift+B"): # Обработка Alt + Shift + B
    await switch_emoji(BUSY)
    elif keyboard.is_pressed("alt+shift+W"): # Обработка Alt + Shift + W
    await switch_emoji(WORK)
    if keyboard.is_pressed("alt+shift+F"): # Обработка Alt + Shift + F
    await switch_emoji(FIFTY_FIFTY)
    asyncio.run(main) # Запуск программы
    Ну лично мне такие хоткеи самые удобные​
    Python
    from pyrogram import Client, types
    import keyboard
    import asyncio

    BUSY = 5339233635620899144 # айди эмодзи занятости
    WORK = 5339135753316222622 # айди эмодзи работы
    FIFTY_FIFTY = 5339286072876614251 # айди эмодзи 50/50 работы

    app = Client(
    name="StatusSwitcher",
    api_id=2246, # Сюда вы вставляете свой API_ID
    api_hash="154стлыолывтс27baa8" # Сюда API_HASH
    )


    async def switch_emoji(emoji_id: int):
    await app.set_emoji_status(
    types.EmojiStatus(custom_emoji_id=emoji_id)
    )

    async def main():
    await app.start()
    while True:
    if keyboard.is_pressed("alt+shift+B"):
    await switch_emoji(BUSY)
    elif keyboard.is_pressed("alt+shift+W"):
    await switch_emoji(WORK)
    if keyboard.is_pressed("alt+shift+F"):
    await switch_emoji(FIFTY_FIFTY)

    asyncio.run(main())
    Вот так выглядит полная программа, просто и со вкусом
    Если вы захотели поменять хоткеи, пользуйтесь докой - https://github.com/boppreh/keyboard

    Для запуска в терминал введите​

    ⁡poetry run py app.py (Windows)

    poetry run python3 app.py (etc.)
    ⁡​


    При входе вам потребуется указать номер телефона, ввести код из ТГ и пароль. После чего ваша программа готова к использованию!​
    Ну... вот и все!
    Спасибо за прочтение статьи, буду рад ответить на вопросы :coder:


    До скорого
     
    6 июл 2024 Изменено
  2. ТайлерДерден
    Супер! Никогда мне такое не нужно было, спасибо! Класс!
     
    1. json Автор темы
Top