From a8c1d1776f802a67d2ecd5bc62624c72c2a2e732 Mon Sep 17 00:00:00 2001 From: missytake Date: Sat, 5 Apr 2025 23:10:44 +0200 Subject: [PATCH] delete contact + chat after responding to request --- src/keyserver_bot/hooks.py | 14 +++++++++++++- tests/test_hooks.py | 25 ++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/keyserver_bot/hooks.py b/src/keyserver_bot/hooks.py index 846610d..93f2ed0 100644 --- a/src/keyserver_bot/hooks.py +++ b/src/keyserver_bot/hooks.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -from deltachat_rpc_client import events, run_bot_cli +from deltachat_rpc_client import events, run_bot_cli, EventType, Message from keyserver_bot.wkd import request_from_wkd from keyserver_bot.koo import request_from_koo @@ -11,12 +11,16 @@ hooks = events.HookCollection() @hooks.on(events.RawEvent) def log_event(event): print(event) + if event.kind == EventType.MSG_DELIVERED or event.kind == EventType.MSG_FAILED: + msg = Message(event.account, event.msg_id).get_snapshot() + delete_data(msg) @hooks.on(events.NewMessage) def echo(event): snapshot = event.message_snapshot email = snapshot.text + # TODO: validate email RFC public_key = request_key_by_email(email) if not public_key: snapshot.chat.send_text("Sorry, I could not find a key for this user.") @@ -28,6 +32,13 @@ def echo(event): snapshot.chat.send_file(vcard_path) +def delete_data(msg): + contacts = msg.chat.get_contacts() + msg.chat.delete() + for member in contacts: + member.delete() + + def request_key_by_email(email) -> str: domain = email.split("@")[1] public_key = request_from_wkd(email, domain) @@ -39,6 +50,7 @@ def request_key_by_email(email) -> str: def main(): + # TODO: print invite link run_bot_cli(hooks) diff --git a/tests/test_hooks.py b/tests/test_hooks.py index 7c1bb4f..7b129b9 100644 --- a/tests/test_hooks.py +++ b/tests/test_hooks.py @@ -1,5 +1,9 @@ +import os + import pytest -from keyserver_bot.hooks import request_key_by_email +from keyserver_bot.hooks import request_key_by_email, delete_data +from deltachat_rpc_client.pytestplugin import acfactory + @pytest.mark.parametrize( ("email", "public_key"), @@ -11,3 +15,22 @@ from keyserver_bot.hooks import request_key_by_email ) def test_request_by_email(email, public_key): assert public_key == request_key_by_email(email) + + +def test_delete_data(acfactory): + if not os.getenv("CHATMAIL_DOMAIN"): + os.environ["CHATMAIL_DOMAIN"] = "nine.testrun.org" + bot, user = acfactory.get_online_accounts(2) # waiter lock + joincode = bot.get_qr_code() + chat = user.secure_join(joincode) + bot.wait_for_securejoin_inviter_success() + + chat.send_text("hi :)") + msg = bot.wait_for_incoming_msg() + msg = msg.get_snapshot().chat.send_text("command not found :P") + user.wait_for_incoming_msg() + + assert len(bot.get_chatlist()) == 3 + delete_data(msg.get_snapshot()) + assert bot.get_contacts() == [] + assert len(bot.get_chatlist()) == 2