Size: a a a

ioBroker smarthome

2022 February 07

B

Blaze in ioBroker smarthome
боты не могут общаться друг с другом, ограничение телеги. я делал "эмулятор клиента" на питоне, и пушил сообщения от бота в mqtt
источник

e

electric in ioBroker smarthome
Пока лучше решения, чем пересылать вручную с телефона сообщения из подключенного чат-бота в бот, созданный в iob, не нашел.
источник

e

electric in ioBroker smarthome
а можешь ссылкой поделиться? хотелось бы конечно более нативно, на js например (можно было бы сделать скрипт в драйвере js)
источник

B

Blaze in ioBroker smarthome
ссылкой на что?)
источник

e

electric in ioBroker smarthome
сам писал на питоне или решение "подсмотрел" в тырнете?
источник

B

Blaze in ioBroker smarthome
сам писал конечно
источник

e

electric in ioBroker smarthome
а можешь выложить текст скрипта? обезличенный от данных если можно....
источник

B

Blaze in ioBroker smarthome
from telethon.sync import TelegramClient, events
from telethon.errors import SessionPasswordNeededError
from telethon.tl.types import PeerUser, PeerChannel

import settings
from time import sleep
import paho.mqtt.client as mqtt
import logging
from threading import Thread


client = TelegramClient(f'sessions/{settings.phone.replace("+", "")}.session', settings.api_id, settings.api_hash)
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)

while not client.is_connected():
   sleep(1)
   client.connect()

if not client.is_user_authorized():
   client.send_code_request(settings.phone)
   try:
       myself = client.sign_in(settings.phone, input('Enter code: '))
   except SessionPasswordNeededError:
       client.sign_in(password=input('Enter cloud password: '))


mq = mqtt.Client("WeatherSayer service")
mq.connect('localhost')

process = Thread(target=mq.loop_forever)
process.daemon = True
process.start()


@client.on(event=events.NewMessage())
async def messageHandler(event):
   if type(event.message.peer_id) == PeerUser and event.message.peer_id.user_id in [123456789]:  # ID бота, от которого нужны сообщения
       logger.info(f"weather received: {event.message.message}")
       msg_string = f'{event.message.message}'.replace("\n", "").strip()
       publish_mq(topic="/weather/today", payload=msg_string)
   else:
       logger.info(f"event received: {event}")


@client.on(event=events.ChatAction())
async def chatHandler(event):
   logger.info(f"chat action received: {event}")


def publish_mq(topic, payload):
   try:
       mq.publish(topic=topic, payload=payload)
   except Exception as ex:
       logger.error(f'Error!: {ex}')


client.run_until_disconnected()
источник

B

Blaze in ioBroker smarthome
рядом должна быть папка sessions, соответственно на неё должны быть права. юнит systemd для запуска нужен?
источник

e

electric in ioBroker smarthome
да если можно, в идеале бы небольшой howto как это запустить на, предположим, голом дебиан (какие пакеты нужно поставить и настроить)
источник

a

aurodionov in ioBroker smarthome
о .......майнер 😂
источник

B

Blaze in ioBroker smarthome
эм?
источник

e

electric in ioBroker smarthome
может в целом "запихать" в докер-образ возможно?
источник

a

aurodionov in ioBroker smarthome
шутка юмора плин 🤷🏻‍♂️
источник

B

Blaze in ioBroker smarthome
а... вообще майнеры лучше в бинари паковать, так их обнаружить сложнее =)
источник

B

Blaze in ioBroker smarthome
я для таких скриптов не использую докер, с ним слишком много возни
источник

B

Blaze in ioBroker smarthome
cd /opt && mkdir tghelper && cd ./tghelper
положить скрипт в /opt/tghelper
pip3 install telethon && pip3 install paho-mqtt
запустить скрипт вручную, авторизоваться
положить юнит в /etc/systemd/system под именем tghelper.service
systemctl enable tghelper
service tghelper start
источник

B

Blaze in ioBroker smarthome
[Unit]
Description=TGHelper daemon
After=syslog.target
After=network.target

[Service]
Type=simple
User=pi
Group=pi
ExecStart=/usr/bin/python3 -u /opt/tghelper/main.py
PIDFile=/run/tghelper.pid
WorkingDirectory=/opt/tghelper
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=TGHELPER

# Give the script some time to startup
TimeoutSec=10
RestartSec=10

[Install]
WantedBy=multi-user.target
источник

B

Blaze in ioBroker smarthome
как то так, вроде ничего не забыл)
источник

B

Blaze in ioBroker smarthome
а, ну да. рядом со скриптом положить файл settings.py с содержимым
api_id = 123456
api_hash = "1234567890asdfghjkl"
phone = "+79991234567"
источник