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