add more high-level methods and event hooking

This commit is contained in:
adbenitez
2022-12-08 07:32:20 -05:00
parent 519f658c07
commit a9afc1e6ba
16 changed files with 1220 additions and 185 deletions

View File

@@ -1,54 +1,25 @@
#!/usr/bin/env python3
"""Minimal echo bot example.
it will echo back any text send to it, it also will print to console all Delta Chat core events.
Pass --help to the CLI to see available options.
"""
import asyncio
import logging
import sys
import deltachat_rpc_client as dc
from deltachat_rpc_client import events, run_bot_cli
hooks = events.HookCollection()
async def main():
async with dc.Rpc() as rpc:
deltachat = dc.DeltaChat(rpc)
system_info = await deltachat.get_system_info()
logging.info("Running deltachat core %s", system_info["deltachat_core_version"])
@hooks.on(events.RawEvent)
async def log_event(event):
print(event)
accounts = await deltachat.get_all_accounts()
account = accounts[0] if accounts else await deltachat.add_account()
await account.set_config("bot", "1")
if not await account.is_configured():
logging.info("Account is not configured, configuring")
await account.set_config("addr", sys.argv[1])
await account.set_config("mail_pw", sys.argv[2])
await account.configure()
logging.info("Configured")
else:
logging.info("Account is already configured")
await deltachat.start_io()
async def process_messages():
for message in await account.get_fresh_messages_in_arrival_order():
snapshot = await message.get_snapshot()
if not snapshot.is_info:
await snapshot.chat.send_text(snapshot.text)
await snapshot.message.mark_seen()
# Process old messages.
await process_messages()
while True:
event = await account.wait_for_event()
if event["type"] == "Info":
logging.info("%s", event["msg"])
elif event["type"] == "Warning":
logging.warning("%s", event["msg"])
elif event["type"] == "Error":
logging.error("%s", event["msg"])
elif event["type"] == "IncomingMsg":
logging.info("Got an incoming message")
await process_messages()
@hooks.on(events.NewMessage)
async def echo(msg):
await msg.chat.send_text(msg.text)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())
asyncio.run(run_bot_cli(hooks))