Загрузка...

[Telegram + Python] Change emoji status on the fly

Thread in Python created by json Jul 6, 2024. (bumped Apr 28, 2025) 778 views

  1. json
    json Topic starter Jul 6, 2024 1446 Jan 13, 2023
    Многие люди используют эмодзи статус в телеграмме для обозначения статуса их работы
    Будь это свободен, занят или готов ответить
    Я тоже решил начать это делать и без заморочек сделать скрипт для автоматики...


    Итак...

    Всем привет!
    Сегодня напишем простой, но полезный скрипт
    Многие люди, у который взаимодействие с клиентами происходит в ТГ пользуются эмодзи статусами для обозначения их статуса (тавтология :da: )
    К примеру, есть крутой кодер и ему пишет 100500 людей в день. У него есть определенный график работы в профиле, но всем по**й на это.
    Для этого он делает вступительное сообщение с обозначением всех статусов и люди начинают обращать на это внимание.
    Но вот незадача! Каждый раз менять вручную статус - не лучшее решение.
    Мы напишем софт, который будет отслеживать клавиши и ставить нужный статус​
    Т.к. лично я перескакиваю с Windows на Linux, я буду использовать кроссплатформенную библиотеку для обработки клавиш keyboard
    Для работы с ТГ - Pyrogram
    А для работы внутри проекта предпочитаю Poetry.​
    Вам необходимо установить Poetry для удобной работы с пакетами и виртуальными окружениями
    Code
    pip3 install poetry
    После чего, в вашей папке, где будете хранить проект, введите
    Code
    poetry init
    Там по инструкции следует все ввести, где спрашивает про библиотеки, вводите варианты, которые ввел выше.
    Вот такой pyproject.toml у меня вышел​
    Code
    [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:


    До скорого
     
  2. ТайлерДерден
    Супер! Никогда мне такое не нужно было, спасибо! Класс!
     
    1. json Topic starter
Loading...
Top