Телехтон: Не можете получить разницу, так как учетная запись не авторизована?Python

Программы на Python
Ответить
Anonymous
 Телехтон: Не можете получить разницу, так как учетная запись не авторизована?

Сообщение Anonymous »

Я пытаюсь запустить сценарий, который пересылает сообщения из одного определенного канала на мой сервер Discord через веб-перехватчик. Также мне нужно, чтобы он отслеживал момент завершения, чтобы правильно закрыть сеанс, и регистрировал момент завершения в отдельном канале TG, чтобы сообщить мне, был ли сценарий остановлен Ubuntu или чем-то еще. Когда я использую client.run_until_disconnected, все работает нормально, но в этом случае я не могу управлять моментом завершения, поэтому вместо этого я использую этот цикл:

Код: Выделить всё

terminate_signal_received = False

async def main():
global terminate_signal_received

client = TelegramClient(session_name, appid, apihash)
print(f'Registering events on {input_channels_entities}...')

@client.on(events.NewMessage(chats=input_channels_entities))
async def handler(event):
msg = event.message.message
await send_to_webhook(msg, event.chat.title)

# Start the client and run until interrupted or an exception occurs
try:
await client.start()
print("Establishing test message...")
await client.send_message(log_tg_channel, f"✅ **{name}** is online!")
print("Client started!")
# Run until termination signal is received or an exception occurs
while not terminate_signal_received:
await asyncio.sleep(0.1)
except asyncio.CancelledError:
print("Cancelled!")
except Exception as e:
print(f"Error: {e}")
finally:
print("Logging about termination...")
if client.is_connected():
await client.send_message(log_tg_channel, f"⛔️ **{name}** was terminated!")
await client.disconnect()
else:
print("Can't! Client is not connected!")

# Signal handler for termination signals
def signal_handler(sig, frame):
global terminate_signal_received
print(f"Received signal {sig}! Stopping...")
terminate_signal_received = True

# Register the signal handler
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)

if __name__ == '__main__':
asyncio.run(main())
Итак, скрипт запущен и подключен, все в порядке, у меня есть сообщение журнала тестирования. Если я отправляю сообщения в моем «просматриваемом» канале, они также пересылаются в Discord, все хорошо, и если я нажимаю телемарафон Ctrl + C, отправляю сообщение о завершении и правильно выхожу из системы. Но если сценарий выполняется несколько минут (1-5 в случайном порядке), я начинаю получать повторяющееся сообщение от телемарафона:

Код: Выделить всё

INFO:telethon.client.updates:Cannot get difference since the account is not logged in: AuthKeyUnregisteredError
После этого скрипт больше не видит новые сообщения, и интересно то, что если я пытаюсь остановить его с помощью Ctrl+C, в тот момент, когда он должен отправить сообщение журнала завершения, он аварийно завершает работу.

Код: Выделить всё

telethon.errors.rpcerrorlist.AuthKeyUnregisteredError: The key is not registered in the system (caused by SendMessageRequest)
независимо от того, что есть проверка if client.is_connected():, поэтому он думает, что он подключен, но, видимо, это не так.
Очень запутанно, и я застрял на этом уже 2 недели без какого-либо прогресса, поэтому, пожалуйста, помогите...
Кстати, сегодня, после нескольких дней перерыва, скрипт действительно работает в моей тестовой среде в течение получаса и был успешно завершен после это. Но после этого он отказывается работать как в тестовой среде, так и на сервере.

Подробнее здесь: https://stackoverflow.com/questions/766 ... -logged-in
Ответить

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

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

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

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

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