Как заставить этот скрипт запускаться в реальном времени по сообщениюPython

Программы на Python
Ответить
Anonymous
 Как заставить этот скрипт запускаться в реальном времени по сообщению

Сообщение Anonymous »

У меня есть этот скрипт для копирования сообщений из одного канала в другой в Telegram через Python.
В настоящее время он запускается один раз, копирует все недостающие сообщения и затем завершается.
Как я могу изменить его, чтобы он запускался либо с интервалом, либо запускался при появлении нового сообщения в канале?
У меня есть другие используемые файлы, такие как файлы конфигурации API с ключом/каналами API и т. д.
Даже если кто-то может помочь указать мне правильное направление Я буду нырять еще. Я не очень хорошо знаком с Python.

import asyncio
import logging

from telethon.tl.patched import MessageService
from telethon.errors.rpcerrorlist import FloodWaitError
from telethon import TelegramClient
from telethon.sessions import StringSession
from settings import API_ID, API_HASH, forwards, get_forward, update_offset, STRING_SESSION

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)

SENT_VIA = f'\n__Sent via__ `{str(__file__)}`'

def intify(string):
try:
return int(string)
except:
return string

async def forward_job():
''' the function that does the job 😂 '''
if STRING_SESSION:
session = StringSession(STRING_SESSION)
else:
session = 'forwarder'

async with TelegramClient(session, API_ID, API_HASH) as client:

confirm = ''' IMPORTANT 🛑
Are you sure that your `config.ini` is correct ?

You can run the `get_chat_info.py` script to confirm the `from` and `to`.

Press [ENTER] to continue:
'''

input(confirm)

error_occured = False
for forward in forwards:
from_chat, to_chat, offset = get_forward(forward)

if not offset:
offset = 0

last_id = 0

async for message in client.iter_messages(intify(from_chat), reverse=True, offset_id=offset):
if isinstance(message, MessageService):
continue
try:
await client.send_message(intify(to_chat), message)
last_id = str(message.id)
logging.info('forwarding message with id = %s', last_id)
update_offset(forward, last_id)

except FloodWaitError as fwe:
print(f'\n{fwe}\n\nRun the script again after some time. \
FloodWaitError Occured')
quit()
except Exception as err:
logging.exception(err)
error_occured = True
continue

if __name__ == "__main__":
assert forwards
asyncio.run(forward_job())


Подробнее здесь: https://stackoverflow.com/questions/659 ... -a-message
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»