Files
element-bot/test.py
T
2026-10-18 15:44:55 +03:00

52 lines
1.7 KiB
Python

import asyncio
import sys
import traceback
import login
import callbacks
from nio import (
RoomMessageText,
InviteMemberEvent,
MegolmEvent,
KeyVerificationEvent
)
async def main():
callbacks.client = await login.login_from_credentials()
# Критично для E2EE: загружаем ключи бота на сервер,
# чтобы другие устройства могли с ним общаться
if callbacks.client.should_upload_keys:
await callbacks.client.keys_upload()
print("[INFO] Ключи E2EE загружены на сервер.")
# Регистрируем обработчики
callbacks.client.add_event_callback(callbacks.message_callback, RoomMessageText)
callbacks.client.add_event_callback(callbacks.megolm_callback, MegolmEvent)
callbacks.client.add_event_callback(callbacks.invite_callback, InviteMemberEvent)
callbacks.client.add_to_device_callback(callbacks.to_device_callback, KeyVerificationEvent)
print("[INFO] Эхо-бот запущен. Для выхода нажмите Ctrl+C.")
after_sync_task = asyncio.ensure_future(callbacks.after_first_sync())
sync_task = asyncio.ensure_future(
callbacks.client.sync_forever(timeout=30000, full_state=True)
)
try:
await asyncio.gather(after_sync_task, sync_task)
except asyncio.CancelledError:
pass
finally:
await callbacks.client.close()
print("[INFO] Клиент закрыт.")
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("\n[INFO] Остановка бота.")
except Exception:
print(traceback.format_exc())
sys.exit(1)