delete contact + chat after responding to request

This commit is contained in:
missytake 2025-04-05 23:10:44 +02:00
parent da9d5cf6ee
commit a8c1d1776f
Signed by: missytake
GPG key ID: 04CC6658320518DF
2 changed files with 37 additions and 2 deletions

View file

@ -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)

View file

@ -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