TGENGINE. installation - nagaevkirill/WIKI GitHub Wiki

Обновить apt

apt update
apt upgrade

установить ufw

apt install ufw

настроить ufw

ufw allow ssh
ufw enable

установить python

apt install python3-full

создать проект python

python3 -m venv /home/tg_engine
cd /home/tg_engine
touch tg_engine.py
touch _CREDS.py

Проверить все ли необходимые зависимости для libtdjson установлены

ldd libtdjson.so

Возможно для корректной работы библиотеки libtdjson потребуется установить libssl.1.1

cd /tmp
wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

Запустить

python3 tg_engine.py
import time

import pika
import json
from telegram.client import Telegram
import _CREDS as mq

# Конфигурация RabbitMQ
RABBITMQ_HOST = mq.server
QUEUE_NAME = mq.queue

# Конфигурация TDLib
API_ID = mq.api_id
API_HASH = mq.api_hash
PHONE_NUMBER = mq.phone

# Функция отправки сообщения в Telegram
def send_message(tdlib_client, chat_id, text):
    chat_id: int
    result = tdlib_client.send_message(
                chat_id = chat_id,
                text = text,
            )
    result.wait()
    print(result.update)

    time.sleep(0.3)

# Функция обработки сообщений из RabbitMQ
def process_message(tdlib_client, channel, method, properties, body):
    try:
        message = json.loads(body)
        chat_id = message.get('chat_id')
        text = message.get('text')
        if chat_id and text:
            send_message(tdlib_client, chat_id, text)
            print(f"Message sent to chat {chat_id}: {text}")
        else:
            print("Invalid message format:", message)
    except Exception as e:
        print("Error processing message:", e)
    # finally:
    #     channel.basic_ack(delivery_tag=method.delivery_tag)

# Основной код
def main():
    # Настройка TDLib
    tdlib_client = Telegram(
        api_id = API_ID,
        api_hash = API_HASH,
        phone = PHONE_NUMBER,
        # library_path='tdlib/libtdjson.dylib', если библиотека установленная по умолчанию не подходит можно указать напрямую
        database_encryption_key=mq.database_encryption_key,
        files_directory=mq.files_directory
    )
    tdlib_client.login(blocking=True)

    # Настройка RabbitMQ
    creds = pika.credentials.PlainCredentials(mq.user, mq.userpass)
    connection = pika.BlockingConnection(pika.ConnectionParameters(mq.server, mq.port, mq.v_host, creds))
    channel = connection.channel()

    # Подписка на очередь
    channel.basic_consume(
        queue=QUEUE_NAME,
        on_message_callback=lambda ch, method, props, body: process_message(tdlib_client, ch, method, props, body),
        auto_ack=True
    )

    print("Listening for messages...")
    try:
        channel.start_consuming()
    except KeyboardInterrupt:
        print("Shutting down...")
    finally:
        connection.close()

if __name__ == "__main__":
    main()
#!/bin/bash
source /home/tg_engine/bin/activate
python /home/tg_engine/tg_engine.py
deactivate

скрипт отслеживания наличия в процессах запущенного tg_engine.py

#!/bin/bash

APP_PATH="/home/tg_engine/tg_engine.py"
#  ^z                    ^c ^a          ^h          ^`               ^o
START_CMD="bash /home/run_tg_engine.sh"

#  ^= ^`       ^` ^o    ,        ^c ^i             ^`   ^f   ^a ^a
pgrep -f "$APP_PATH" > /dev/null 2>&1

if [ $? -ne 0 ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') Engine is not running. Starting..."
    cd $(dirname "$APP_PATH")
    eval $START_CMD
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') Engine is running."
fi

прописываем его запуск каждую минуту и пишем в логи

* * * * * /home/autorun_tg_engine.sh >> /logs/tgengine/tg_engine_status.log
⚠️ **GitHub.com Fallback** ⚠️