From b57e52c08a7fdd4ff021f5182ff4663483f0288c Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 23 Sep 2025 10:15:04 +0200 Subject: [PATCH 1/7] python rewrite - untested --- go.mod | 31 -- go.sum | 57 ---- group-editor-bot.go | 264 ------------------ group-editor-bot_test.go | 52 ---- pyproject.toml | 68 +++++ scripts/run_tests.sh | 42 --- src/group_editor_bot.egg-info/PKG-INFO | 17 ++ src/group_editor_bot.egg-info/SOURCES.txt | 12 + .../dependency_links.txt | 1 + .../entry_points.txt | 2 + src/group_editor_bot.egg-info/requires.txt | 7 + src/group_editor_bot.egg-info/top_level.txt | 1 + src/group_editor_bot/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 162 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 0 -> 4579 bytes .../durian-realtime-editor-v4.0.4.xdc | Bin 0 -> 179440 bytes src/group_editor_bot/hooks.py | 92 ++++++ tests/test_hooks.py | 41 +++ 18 files changed, 241 insertions(+), 446 deletions(-) delete mode 100644 go.mod delete mode 100644 go.sum delete mode 100644 group-editor-bot.go delete mode 100644 group-editor-bot_test.go create mode 100644 pyproject.toml delete mode 100755 scripts/run_tests.sh create mode 100644 src/group_editor_bot.egg-info/PKG-INFO create mode 100644 src/group_editor_bot.egg-info/SOURCES.txt create mode 100644 src/group_editor_bot.egg-info/dependency_links.txt create mode 100644 src/group_editor_bot.egg-info/entry_points.txt create mode 100644 src/group_editor_bot.egg-info/requires.txt create mode 100644 src/group_editor_bot.egg-info/top_level.txt create mode 100644 src/group_editor_bot/__init__.py create mode 100644 src/group_editor_bot/__pycache__/__init__.cpython-312.pyc create mode 100644 src/group_editor_bot/__pycache__/hooks.cpython-312.pyc create mode 100644 src/group_editor_bot/durian-realtime-editor-v4.0.4.xdc create mode 100644 src/group_editor_bot/hooks.py create mode 100644 tests/test_hooks.py diff --git a/go.mod b/go.mod deleted file mode 100644 index 86d9391..0000000 --- a/go.mod +++ /dev/null @@ -1,31 +0,0 @@ -module github.com/deltachat-bot/group-editor-bot - -go 1.21 - -toolchain go1.21.0 - -require ( - github.com/cavaliergopher/grab/v3 v3.0.1 - github.com/deltachat-bot/deltabot-cli-go v0.6.1-0.20250108161819-a337c44b9703 - github.com/deltachat/deltachat-rpc-client-go v1.134.0 - github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - github.com/spf13/cobra v1.8.0 - github.com/stretchr/testify v1.8.2 -) - -require ( - github.com/creachadair/jrpc2 v1.1.2 // indirect - github.com/creachadair/mds v0.8.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/mdp/qrterminal/v3 v3.2.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.26.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/term v0.16.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - rsc.io/qr v0.2.0 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 6dbbb67..0000000 --- a/go.sum +++ /dev/null @@ -1,57 +0,0 @@ -github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4= -github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/jrpc2 v1.1.2 h1:UOYMipEFYlwd5qmcvs9GZBurn3oXt1UDIX5JLjWWFzo= -github.com/creachadair/jrpc2 v1.1.2/go.mod h1:JcCe2Eny3lIvVwZLm92WXyU+tNUgTBWFCLMsfNkjEGk= -github.com/creachadair/mds v0.8.2 h1:+Jvq8XBrREerXI/QZpNAeiLjIBuVMOl8p3v+mKgSexY= -github.com/creachadair/mds v0.8.2/go.mod h1:4vrFYUzTXMJpMBU+OA292I6IUxKWCCfZkgXg+/kBZMo= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deltachat-bot/deltabot-cli-go v0.6.1-0.20250108161819-a337c44b9703 h1:JTEAZagMi09rl5hC6v/OCjulQhK7joXIaOaPyzthvAI= -github.com/deltachat-bot/deltabot-cli-go v0.6.1-0.20250108161819-a337c44b9703/go.mod h1:Va1UY+jfELQZvB3mNVpW8ACdECDJbeWve7SynvtgQ5c= -github.com/deltachat/deltachat-rpc-client-go v1.134.0 h1:rpGa/kL417ufyxsivT/G751aZifh8bpiPTIsXMzdDAI= -github.com/deltachat/deltachat-rpc-client-go v1.134.0/go.mod h1:Ctd0M0o87y2B0QSOn8QN6IMDWjHD7XzDKsjNMYwP208= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/mdp/qrterminal/v3 v3.2.0 h1:qteQMXO3oyTK4IHwj2mWsKYYRBOp1Pj2WRYFYYNTCdk= -github.com/mdp/qrterminal/v3 v3.2.0/go.mod h1:XGGuua4Lefrl7TLEsSONiD+UEjQXJZ4mPzF+gWYIJkk= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= -github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= -rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= diff --git a/group-editor-bot.go b/group-editor-bot.go deleted file mode 100644 index c45c7df..0000000 --- a/group-editor-bot.go +++ /dev/null @@ -1,264 +0,0 @@ -package main - -import ( - "math/rand" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/cavaliergopher/grab/v3" - "github.com/deltachat-bot/deltabot-cli-go/botcli" - "github.com/deltachat/deltachat-rpc-client-go/deltachat" - "github.com/deltachat/deltachat-rpc-client-go/deltachat/option" - qrcode "github.com/skip2/go-qrcode" - "github.com/spf13/cobra" -) - -var cli = botcli.New("group-editor-bot") - -func onBotInit(cli *botcli.BotCli, bot *deltachat.Bot, cmd *cobra.Command, args []string) { - bot.OnNewMsg(onNewMsg) - - accounts, err := bot.Rpc.GetAllAccountIds() - if err != nil { - cli.Logger.Error(err) - } - for _, accId := range accounts { - name, err := bot.Rpc.GetConfig(accId, "displayname") - if err != nil { - cli.Logger.Error(err) - } - if name.UnwrapOr("") == "" { - err = bot.Rpc.SetConfig(accId, "displayname", option.Some("Group Editor Bot")) - if err != nil { - cli.Logger.Error(err) - } - status := "I am a bot that helps managing editors in groups, send me /help for more info" - err = bot.Rpc.SetConfig(accId, "selfstatus", option.Some(status)) - if err != nil { - cli.Logger.Error(err) - } - err = bot.Rpc.SetConfig(accId, "delete_server_after", option.Some("1")) - if err != nil { - cli.Logger.Error(err) - } - } - } -} - -func onNewMsg(bot *deltachat.Bot, accId deltachat.AccountId, msgId deltachat.MsgId) { - logger := cli.GetLogger(accId).With("msg", msgId) - selfAddr, err := bot.Rpc.GetConfig(accId, "addr") - msg, err := bot.Rpc.GetMessage(accId, msgId) - if err != nil { - logger.Error(err) - return - } - - if msg.SystemMessageType == deltachat.SysmsgMemberAddedToGroup { - resendPads(bot.Rpc, accId, msg.ChatId) - } - - if msg.SystemMessageType == deltachat.SysmsgMemberRemovedFromGroup { - if strings.Contains(msg.Text, "Member Me ("+*selfAddr.Value+") removed by ") { - bot.Rpc.DeleteChat(accId, msg.ChatId) - } - } - - if !msg.IsBot && !msg.IsInfo && msg.FromId > deltachat.ContactLastSpecial { - chat, err := bot.Rpc.GetBasicChatInfo(accId, msg.ChatId) - if err != nil { - logger.Error(err) - return - } - if chat.ChatType == deltachat.ChatSingle || strings.HasPrefix(msg.Text, "/") { - err = bot.Rpc.MarkseenMsgs(accId, []deltachat.MsgId{msg.Id}) - if err != nil { - logger.Error(err) - } - } - - args := strings.Split(msg.Text, " ") - switch args[0] { - case "/invite": - if chat.ChatType == deltachat.ChatGroup { - sendInviteQr(bot.Rpc, accId, msg.ChatId) - } else { - text := "The /invite command can only be used in groups, send /help for more info" - _, err := bot.Rpc.SendMsg(accId, msg.ChatId, deltachat.MsgData{Text: text}) - if err != nil { - logger.Error(err) - } - } - case "/pin": - sendMessage(bot.Rpc, accId, msg.ChatId, msg.Text) - return - case "/editor": - sendPad(bot.Rpc, accId, msg.ChatId, msg.Text) - return - case "/help": - sendHelp(bot.Rpc, accId, msg.ChatId) - default: - if chat.ChatType == deltachat.ChatSingle { - sendHelp(bot.Rpc, accId, msg.ChatId) - } - } - } - - if msg.Sender.Address != selfAddr.Unwrap() { - err = bot.Rpc.DeleteMessages(accId, []deltachat.MsgId{msg.Id}) - if err != nil { - logger.Error(err) - } else { - println("Deleted message " + strconv.FormatUint(uint64(msg.Id), 10)) - } - } -} - -func sendMessage(rpc *deltachat.Rpc, accId deltachat.AccountId, chatId deltachat.ChatId, command string) { - var description string - if len(command) > 7 { - description = command[5:] // bot adds text after /pin as text for the pinned message - } else { - description = "" - } - msgID, err := rpc.SendMsg(accId, chatId, deltachat.MsgData{Text: description}) - if err != nil { - cli.GetLogger(accId).With("chat", chatId).Error(err) - } - cli.Logger.Info("Sent pinned message " + string(msgID)) -} - -func sendPad(rpc *deltachat.Rpc, accId deltachat.AccountId, chatId deltachat.ChatId, command string) { - HomeDir, err := os.UserHomeDir() - editor_path := filepath.Join(HomeDir, ".config", "group-editor-bot", "durian-realtime-editor-v4.0.4.xdc") - var description string - if len(command) > 7 { - description = command[8:] // bot adds text after /editor as description to the editor.xdc message - } else { - description = "" - } - msgID, err := rpc.SendMsg(accId, chatId, deltachat.MsgData{Text: description, File: editor_path}) - if err != nil { - cli.GetLogger(accId).With("chat", chatId).Error(err) - } - cli.Logger.Info("Sent editor message " + string(msgID)) -} - -func resendPads(rpc *deltachat.Rpc, accId deltachat.AccountId, chatId deltachat.ChatId) { - logger := cli.GetLogger(accId).With("chat", chatId) - var toResend []deltachat.MsgId - selfAddr, err := rpc.GetConfig(accId, "addr") - if err == nil { - msgIds, _ := rpc.GetMessageIds(accId, chatId, false, false) - var msgIdStrings []string - for i := range msgIds { - msgIdStrings = append(msgIdStrings, strconv.FormatUint(uint64(msgIds[i]), 10)) - } - // println("In this chat I know the messages: " + strings.Join(msgIdStrings, ",")) - for _, id := range msgIds { - msg, _ := rpc.GetMessage(accId, id) - senderaddress := msg.Sender.Address - // println(strconv.FormatUint(uint64(msg.Id), 10) + senderaddress + selfAddr.Unwrap()) - // delete MemberAdded System Messages instead of trying to resend them; it will fail - if msg.SystemMessageType == deltachat.SysmsgMemberAddedToGroup && msg.Sender.Address == selfAddr.Unwrap() { - text := msg.Text - err = rpc.DeleteMessages(accId, []deltachat.MsgId{msg.Id}) - if err != nil { - logger.Error(err) - } else { - println("Deleted message " + strconv.FormatUint(uint64(msg.Id), 10) + ": " + text) - } - continue - } - if senderaddress == selfAddr.Unwrap() { - toResend = append(toResend, id) - } - } - // We wait here 5 seconds because otherwise the newly added member - // might get the bot's messages before the member-added message - // which breaks for the newly added member ("unable to verify sender") - // This needs to be prevented on the chatmail core side but as of May 15 2025 - // this wait here makes it less likely the asynchronicity issue happens. - time.Sleep(5 * time.Second) - if toResend != nil { - err := rpc.ResendMessages(accId, toResend) - for err != nil { - var msgIdsStrings []string - for i := range toResend { - msgIdsStrings = append(msgIdsStrings, strconv.FormatUint(uint64(toResend[i]), 10)) - } - cli.Logger.Error("Resending messages " + strings.Join(msgIdsStrings, ",") + " failed with error: '" + err.Error() + "'. Retrying.") - r := rand.Intn(10) - time.Sleep(time.Duration(r) * time.Second) - err = rpc.ResendMessages(accId, toResend) - } - } - } -} - -func sendHelp(rpc *deltachat.Rpc, accId deltachat.AccountId, chatId deltachat.ChatId) { - text := "I am a bot that manages editors in groups.\n\n" - text += "To create a new shared editor for the group, you can write:\n\n" - text += "/editor Shopping List for Friday's Example Party\n\n" - text += "I will send an editor to the group, which anyone can edit; and if new members are added, they will see it, too." - msgId, err := rpc.SendMsg(accId, chatId, deltachat.MsgData{Text: text}) - if err != nil { - cli.GetLogger(accId).With("chat", chatId).Error(err) - } - time.Sleep(10 * time.Second) // sleep for 10 seconds, so the message has a chance to be sent - err = rpc.DeleteMessages(accId, []deltachat.MsgId{msgId}) - if err != nil { - cli.Logger.Error(err) - } -} - -func sendInviteQr(rpc *deltachat.Rpc, accId deltachat.AccountId, chatId deltachat.ChatId) { - logger := cli.GetLogger(accId).With("chat", chatId) - qrdata, _, err := rpc.GetChatSecurejoinQrCodeSvg(accId, option.Some(chatId)) - if err != nil { - logger.Error(err) - return - } - - dir, err := os.MkdirTemp("", "") - if err != nil { - logger.Error(err) - return - } - defer os.RemoveAll(dir) - path := filepath.Join(dir, "qr.png") - - err = qrcode.WriteFile(qrdata, qrcode.Medium, 256, path) - if err != nil { - logger.Error(err) - return - } - msgId, err := rpc.SendMsg(accId, chatId, deltachat.MsgData{Text: qrdata, File: path}) - if err != nil { - logger.Error(err) - } - time.Sleep(10 * time.Second) // sleep for 10 seconds, so the message has a chance to be sent - err = rpc.DeleteMessages(accId, []deltachat.MsgId{msgId}) - if err != nil { - cli.Logger.Error(err) - } -} - -func main() { - cli.OnBotInit(onBotInit) - - HomeDir, err := os.UserHomeDir() - DownloadDir := filepath.Join(HomeDir, ".config", "group-editor-bot") - resp, err := grab.Get(DownloadDir, "https://apps.testrun.org/durian-realtime-editor-v4.0.4.xdc") - if err != nil { - cli.Logger.Error(err) - } - cli.Logger.Info("Download saved to ", resp.Filename) - - if err := cli.Start(); err != nil { - cli.Logger.Error(err) - } -} diff --git a/group-editor-bot_test.go b/group-editor-bot_test.go deleted file mode 100644 index c37ff0c..0000000 --- a/group-editor-bot_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package main - -import ( - "testing" - - "github.com/deltachat-bot/deltabot-cli-go/botcli" - "github.com/deltachat/deltachat-rpc-client-go/deltachat" - "github.com/stretchr/testify/require" -) - -type TestCallback func(bot *deltachat.Bot, botAcc deltachat.AccountId, userRpc *deltachat.Rpc, userAcc deltachat.AccountId) - -var acfactory *deltachat.AcFactory - -func TestMain(m *testing.M) { - acfactory = &deltachat.AcFactory{} - acfactory.TearUp() - defer acfactory.TearDown() - m.Run() -} - -func withBotAndUser(callback TestCallback) { - acfactory.WithOnlineBot(func(bot *deltachat.Bot, botAcc deltachat.AccountId) { - acfactory.WithOnlineAccount(func(userRpc *deltachat.Rpc, userAcc deltachat.AccountId) { - cli := &botcli.BotCli{AppDir: acfactory.MkdirTemp()} - onBotInit(cli, bot, nil, nil) - go bot.Run() //nolint:errcheck - callback(bot, botAcc, userRpc, userAcc) - }) - }) -} - -func TestBot(t *testing.T) { - withBotAndUser(func(bot *deltachat.Bot, botAcc deltachat.AccountId, userRpc *deltachat.Rpc, userAcc deltachat.AccountId) { - chatWithBot := acfactory.CreateChat(userRpc, userAcc, bot.Rpc, botAcc) - _, err := userRpc.MiscSendTextMessage(userAcc, chatWithBot, "hi") - require.Nil(t, err) - msg := acfactory.NextMsg(userRpc, userAcc) - require.Contains(t, msg.Text, "I am a bot") - - groupWithBot, err := userRpc.CreateGroupChat(userAcc, "test group", false) - require.Nil(t, err) - require.Nil(t, userRpc.AddContactToChat(userAcc, groupWithBot, msg.FromId)) - _, err = userRpc.MiscSendTextMessage(userAcc, groupWithBot, "hi") - require.Nil(t, err) - _, err = userRpc.MiscSendTextMessage(userAcc, groupWithBot, "/invite") - require.Nil(t, err) - msg = acfactory.NextMsg(userRpc, userAcc) - require.NotEmpty(t, msg.File) - require.Contains(t, msg.Text, "https://i.delta.chat") - }) -} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..942342b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,68 @@ +[build-system] +requires = ["setuptools>=61"] +build-backend = "setuptools.build_meta" + +[project] +name = "group-editor-bot" +version = "1.0.0" +authors = [{ name = "missytake", email = "missytake@systemli.org" }] +description = "Delta Chat bot that manages editors for a group, even when new people join." +readme = "file: README.md" +requires-python = ">=3.11" +dependencies = [ + "deltachat-rpc-client", + "deltachat-rpc-server", +] + +[project.urls] +Repository = "https://github.com/deltachat-bot/group-editor-bot/" +Issues = "https://github.com/deltachat-bot/group-editor-bot/issues" + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +where = ['src'] + +[project.scripts] +group-editor-bot = "group_editor_bot.hooks:main" + +[project.optional-dependencies] +dev = ["pytest", "tox", "ruff",] + +[tool.ruff] +lint.select = [ + "F", # Pyflakes + "I", # isort + + "PLC", # Pylint Convention + "PLE", # Pylint Error + "PLW", # Pylint Warning +] + +[tool.pytest.ini_options] +addopts = "-v -ra --strict-markers" +log_format = "%(asctime)s %(levelname)s %(message)s" +log_date_format = "%Y-%m-%d %H:%M:%S" +log_level = "INFO" + +[tool.tox] +isolated_build = true +envlist = ["lint","py"] + +[tool.tox.env_run_base] +description = "Run tests under {base_python}" +commands = [["pytest -v -rsXx {posargs}"]] +deps = [ + "pytest", + "pdbpp", +] + +[tool.tox.env.lint] +skipdist = true +skip_install = true +deps = ["ruff"] +commands = [ + ["ruff", "format", "--quiet", "--diff", "src/", "tests/"], + ["ruff", "check", "src/", "tests/"] +] diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh deleted file mode 100755 index cd853ea..0000000 --- a/scripts/run_tests.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/env bash - -# build frontend -go generate ./... - -echo "Checking code with gofmt..." -OUTPUT=`gofmt -d src` -if [ -n "$OUTPUT" ] -then - echo "$OUTPUT" - exit 1 -fi - -echo "Checking code with golangci-lint..." -if ! command -v golangci-lint &> /dev/null -then - echo "golangci-lint not found, installing..." - # binary will be $(go env GOPATH)/bin/golangci-lint - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2 -fi -if ! golangci-lint run -then - exit 1 -fi - -# Install test dependencies -if ! command -v deltachat-rpc-server &> /dev/null -then - echo "deltachat-rpc-server not found, installing..." - curl -L https://github.com/deltachat/deltachat-core-rust/releases/latest/download/deltachat-rpc-server-x86_64-linux --output deltachat-rpc-server - chmod +x deltachat-rpc-server - export PATH=`pwd`:"$PATH" -fi -if ! command -v courtney &> /dev/null -then - echo "courtney not found, installing..." - go install github.com/dave/courtney@master -fi - -# run the tests -courtney -v -t="./..." ${TEST_EXTRA_TAGS:--t="-parallel=1"} -go tool cover -func=coverage.out -o=coverage-percent.out diff --git a/src/group_editor_bot.egg-info/PKG-INFO b/src/group_editor_bot.egg-info/PKG-INFO new file mode 100644 index 0000000..f16326d --- /dev/null +++ b/src/group_editor_bot.egg-info/PKG-INFO @@ -0,0 +1,17 @@ +Metadata-Version: 2.4 +Name: group-editor-bot +Version: 1.0.0 +Summary: Delta Chat bot that manages editors for a group, even when new people join. +Author-email: missytake +Project-URL: Repository, https://github.com/deltachat-bot/group-editor-bot/ +Project-URL: Issues, https://github.com/deltachat-bot/group-editor-bot/issues +Requires-Python: >=3.11 +Description-Content-Type: text/markdown +License-File: LICENSE.txt +Requires-Dist: deltachat-rpc-client +Requires-Dist: deltachat-rpc-server +Provides-Extra: dev +Requires-Dist: pytest; extra == "dev" +Requires-Dist: tox; extra == "dev" +Requires-Dist: ruff; extra == "dev" +Dynamic: license-file diff --git a/src/group_editor_bot.egg-info/SOURCES.txt b/src/group_editor_bot.egg-info/SOURCES.txt new file mode 100644 index 0000000..e3fe391 --- /dev/null +++ b/src/group_editor_bot.egg-info/SOURCES.txt @@ -0,0 +1,12 @@ +LICENSE.txt +README.md +pyproject.toml +src/group_editor_bot/__init__.py +src/group_editor_bot/hooks.py +src/group_editor_bot.egg-info/PKG-INFO +src/group_editor_bot.egg-info/SOURCES.txt +src/group_editor_bot.egg-info/dependency_links.txt +src/group_editor_bot.egg-info/entry_points.txt +src/group_editor_bot.egg-info/requires.txt +src/group_editor_bot.egg-info/top_level.txt +tests/test_hooks.py \ No newline at end of file diff --git a/src/group_editor_bot.egg-info/dependency_links.txt b/src/group_editor_bot.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/group_editor_bot.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/group_editor_bot.egg-info/entry_points.txt b/src/group_editor_bot.egg-info/entry_points.txt new file mode 100644 index 0000000..a6cf5fa --- /dev/null +++ b/src/group_editor_bot.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +group-editor-bot = group_editor_bot.hooks:main diff --git a/src/group_editor_bot.egg-info/requires.txt b/src/group_editor_bot.egg-info/requires.txt new file mode 100644 index 0000000..5e78f89 --- /dev/null +++ b/src/group_editor_bot.egg-info/requires.txt @@ -0,0 +1,7 @@ +deltachat-rpc-client +deltachat-rpc-server + +[dev] +pytest +tox +ruff diff --git a/src/group_editor_bot.egg-info/top_level.txt b/src/group_editor_bot.egg-info/top_level.txt new file mode 100644 index 0000000..72dd283 --- /dev/null +++ b/src/group_editor_bot.egg-info/top_level.txt @@ -0,0 +1 @@ +group_editor_bot diff --git a/src/group_editor_bot/__init__.py b/src/group_editor_bot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/group_editor_bot/__pycache__/__init__.cpython-312.pyc b/src/group_editor_bot/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50fcae23cc610275ca5b4eb1cced103d646b9fbd GIT binary patch literal 162 zcmX@j%ge<81c5G>GC=fW5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!a@5br&rQ`YElw@c zPtH$C)lVbNg7NX0d6^~g@p=W7zc_4i^HWN5 ZQtgUZfhIBnaWRPTk(rT^v4|PS0szKWD6aqj literal 0 HcmV?d00001 diff --git a/src/group_editor_bot/__pycache__/hooks.cpython-312.pyc b/src/group_editor_bot/__pycache__/hooks.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..261a218da7fd71309045f713839c6a746c329908 GIT binary patch literal 4579 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 literal 0 HcmV?d00001 diff --git a/src/group_editor_bot/durian-realtime-editor-v4.0.4.xdc b/src/group_editor_bot/durian-realtime-editor-v4.0.4.xdc new file mode 100644 index 0000000000000000000000000000000000000000..2c5b7fc46ffb9e14506f1f318cbabd3f00d08bbb GIT binary patch literal 179440 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 S^k|fxMT43>0-GSxrnl-D@gujH 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 Sm%)B_Yd`=1`_BKm(f<#HUkwfb literal 0 HcmV?d00001 diff --git a/src/group_editor_bot/hooks.py b/src/group_editor_bot/hooks.py new file mode 100644 index 0000000..3a7c2ab --- /dev/null +++ b/src/group_editor_bot/hooks.py @@ -0,0 +1,92 @@ +import importlib.resources +import os + +from deltachat_rpc_client import EventType, Chat, events, run_bot_cli + +hooks = events.HookCollection() + +HELP_MSG = ( + "I am a bot that manages editors in groups.\n\n" + "To create a new shared editor for the group, you can write:\n\n" + "/editor Shopping List for Friday's Example Party\n\n" + "I will send an editor to the group, which anyone can edit; and if new members are added, they will see it, too." +) + + +@hooks.on(events.NewMessage) +def command(event): + snapshot = event.message_snapshot + + if not snapshot.text.startswith("/"): + return # Not a command + elif snapshot.text == "/invite": + snapshot.chat.send_text(snapshot.chat.get_qr_code()) + elif snapshot.text.strip() == "/help": + snapshot.chat.send_text(HELP_MSG) + elif snapshot.text == "/pin": + snapshot.chat.send_message(text=snapshot.text[5:], file=snapshot.file) + elif snapshot.text == "/editor": + editor_path = ( + importlib.resources.files(__package__) / "durian-realtime-editor-v4.0.4.xdc" + ) + snapshot.chat.send_message(text=snapshot.text[8:], file=editor_path) + + if snapshot.sender != event.account.self_contact: + event.account.delete_messages([snapshot]) + print(f"Deleted message {snapshot.id}") + + +@hooks.on(events.MemberListChanged) +def member_added_or_removed(event): + """If a member was added to the group chat, re-send own messages.""" + if event.member_added: + # If member added to group, resend pads + to_resend = [] + for msg in event.chat: + if msg.sender == event.account.self_contact: + to_resend.append(msg) + event.chat.resend_messages(to_resend) + else: + if event.member == event.account.self_contact: + delete_data(event.chat) + + + + +@hooks.on(events.RawEvent) +def catch_events(event): + """This is called on every raw event and can be used for any kind of event handling. + Unfortunately deltachat-rpc-client doesn't offer high-level events for MSG_DELIVERED or SECUREJOIN_INVITER_PROGRESS + yet, so this needs to be done with raw events. + + :param event: the event object + """ + if os.getenv("DEBUG").lower() == "true": + print(event) + if event.kind == EventType.IMAP_CONNECTED: + event.account.set_config("selfstatus", HELP_MSG) + event.account.set_config("delete_device_after", "3600") + print( + "The bot can be reached via this invite link: " + + event.account.get_qr_code() + ) + + +def delete_data(chat: Chat): + """For a message, delete the chat and all contacts which were in it to clean up. + + :param msg: a Delta Chat Message snapshot + """ + contacts = chat.get_contacts() + chat.delete() + for member in contacts: + member.delete() + + +def main(): + """This is the CLI entry point.""" + run_bot_cli(hooks) + + +if __name__ == "__main__": + main() diff --git a/tests/test_hooks.py b/tests/test_hooks.py new file mode 100644 index 0000000..96ec7fe --- /dev/null +++ b/tests/test_hooks.py @@ -0,0 +1,41 @@ +import os + +import pytest + +from group_editor_bot.hooks import delete_data + +WKD_TIMEOUT = 1 + + +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() + + assert len(bot.get_chatlist()) == 3 + delete_data(msg.get_snapshot()) + assert bot.get_contacts() == [] + assert len(bot.get_chatlist()) == 2 + + +@pytest.mark.parametrize(["text", "file", "reply_text", "reply_file"], {[]}) +def test_commands(text, file, reply_text, reply_file): + pytest.skip("Not yet tested") + + +def test_member_added(acfactory): + pytest.skip("Not yet tested") + + +def test_bot_removed(acfactory): + pytest.skip("Not yet tested") + + +def tests_bot_adds_member(acfactory): + pytest.skip("Not yet tested") From c6dd9f52472fc919700dc8b6bda48b9ec267d386 Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 23 Sep 2025 11:09:16 +0200 Subject: [PATCH 2/7] made resending work --- .../__pycache__/hooks.cpython-312.pyc | Bin 4579 -> 5902 bytes src/group_editor_bot/hooks.py | 31 ++++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/group_editor_bot/__pycache__/hooks.cpython-312.pyc b/src/group_editor_bot/__pycache__/hooks.cpython-312.pyc index 261a218da7fd71309045f713839c6a746c329908..459a9ee41c2c835ed56cfaa8fdf88bce7337e864 100644 GIT binary patch delta 2884 zcmZ`*U2Gf25#GJy{qp!Dks@VElqge-Ov#cJ|1@b+8K2uQG>DQGXp0m@g1qFVfZL{Mfxh@eIY*q`z-SBfsVE(_K#`Yr zm(+NMbDb|G|LzKc)%N3Gop}R`~DCi zTZG^c?1vm4fyWY3>WWr0UY(!OY}fE)*06bvPUyB9%@#A4N=7C(mH+5nn1IYLS^SwN zg8$6yYjV+D9&cFY+VD0Tz+ScqH*rDy9kvboWdR<;@3Fo3SuVsBeAE-~`>?JD!7405 z?B&8#R#e%`2LM1ZDjqWYj_rnY@spY?*`r%^In(Ia0xU3&aHB5-@EzjBI2-I$ITb_z z5eqh!9qt$W`#Z`I6b;Azk}B-lzhHzNVWZXI3K55E^o3}HcQ~WN;T(Iac-0MnGg@T# z^qvI`_wgtv^stZnNmOEv*+##>6!zm)F3j~2E0~$I=+o*KNDwT8hrXcYOPIdI z@(UGj=+^X&Y0Dcoz47Je@n=H2*OJ;zsl6<9Y$P|OKKvh{9e#@2#X+|vb(vDv##38T z62Bt$AKe)zx1@s)Li-*lEtb-0DxH>+FqOnlE|-ye0PGe~7Iehqj5YAh#2+lm|TdSn_Ru$~a)?_&+cJ zu*et!6(Rl z1QK|H^x6d2jWImrisO@BQ5gXjUn3s67F;CE2qIheLI#PV5Pn$>i8{R5=SVIUb|K(6 zL?8=qer7^(9f&|MFYfBm&}y_oXWjc)W6I(579)-a zxsFi7j4G(&RP!RYz!iFkUVHPr7zYsi@3eA(Z1`>V0+@qI3HM7Umuzk%b?W@{w#z`X z+Erm%o4%x>*i|kzm(^o7msM3wwFRV2m#%0kq6ZvJ29byKh(2H)4@^n7`3cR?idPU# z3N~N2V=MJOQ#Yd!k<1Q2b-OlN+65N9Vbo5Qg}k207spFBpPiY}imL5HnojzLY7;dy zK07tlfVoH4rpAd{W&)LFXKc5sO%Z=GYSzfw?2LNJmUNmsD5egMfR zW$K&Q?6f|Co*_#*1w*XXP#iBw(WU3e1j*t+S8DhsK=Zde0pSk>>H7S&`PFb)*mwK2 zO(Fg#(X)~I=}SL;>ErX(@w1!9&wki*_x$U355Iobo7ob-Rb@O}cg5|u+|f;U^kHjc z<#Z+7xxTozXoa6P!%vsPM?PNyjHh>%tpq|=AZ`ZYocB=*?Xvcmos2HNNSda-;+gkQWC8X#s%PoD4db(Th_D(%S{*K%g-`!T_pCDID z9UpbLPe2*bN`vUTFN$z_e)WTyUqf`-Y|3G(R+ge-%9`hh6Zh>{y2 zg}>oR4OEopD&9c7xb&Fbp0YRjh=rcsf3d72R|Oyrpaii{18WZAcYQ$_k?}gssgPzE zei0IuC2SH>+KvtH8%sv0owr0o{odwiSeWZscK&hPreTi;I$t!f} z2qDX$Dg!?$hB4C@EBp47dgv0bpSgDCyXi`ENn{ww5l(Izq))s;O@CXMEA@71W$i$P#;$P zC)!R^mR`Qil!~@Is?DYA{|TrY|H>b(A=?(eo}H`xF4iu;eh#{WEoL&s?6j82pcko~ z+I>FWBWf*_N1YkE6>8?_) l+Pf=q>(GruWf*zH_@GP$+NzYRc8joeRmFFjI$hM~{{jG}l~(`& delta 1875 zcmZ8iO>7fK6rR~1?|2>m1Urkd6YM08>+ly;kp^fQ(vpazA^|G;Ln+!i-X*q)?R0lT zNR=qgDd7MCO(jqdEo~2g=mpVZD-{)~m3m=gkfTixsX#(iFHY&Hmv&|ylhBcN=9@Qf z-g`6ed$X7KJZbg(>UN8OwAk=cx?8;J8DzPv58r1)SB)kDg9Q4o-rPlCqYeL{FiIib z34>6;eXuj(P|vG*L$_SoL|z^#7;$b&@Z{9EY6(NCt|v#;dtbmd2;asJn0=7P z(C5edSs#AN_>sb#O8}tl!}oa!PjLbK6DQ$+*+#s=icEeL|ITd12RT13uuj~_iTDBU zr)rYnp~2I32UbT2^4}132`QXyvePzsR}A3Wth7Vn6%Yc`FuSFyy}AF^aff+fL#8$Y zieTF~ZUkzISqay({@vSZ^NrC6)o?8o1%2uQV20ToK~Qnp5ipy*k$4*MU9JIcr^aCv zn_j=Oi`+*iS*gleakHb@+g5X-h-4*>PdKg(1}tB$dcCrqPmb&9f}zorTB2?wHAA1w z7-@@3rIUu`)YZHq8|nqaa*e8n{D~%~3W{p+x}jyp@j+obJ|nz}gk&mJn8+LWvamD8 zTD+ZI3)QS!E>+1G1x+4L8fl#+uJ99KDAY=Tk9>L;$wU#XdIM!|o9S&U4&YO$vE_RE zlCyOg`4-(5-DMOpQRD`?>Hf-Hjvg?h2TIY`ALAQnFMmD0`hIW)gU1q3jN$4UD z%P44~U>PM$l(?0+6?%mB;TdNzzW+H17Npi`L$TfHd7g8my9TCUJA*IP^?o>f8{CFk zga~!29@Sb%Z*9$~xe-;9lZv7$GPw^;%@xk8ibj|WXr^>Zr#Ya-$ncUMo(OC|XR+el z&16X}aN$GM5^xy;S+(2rCQ?s>EUL*jM#HXMI?vV-(uDCz(T@q&C51I!Fnoj6_=G6Y z<&eTD{DyeLqvD_{Otyi(0QbK1^+319_w~Q^?h%VKvM($8nlB7<%$p-rAv@3#&2z>s<3l}exy)n}pD|zF^fn`pZADA1M zKQ?#l5!bN1CG;17d~m_Bj6AfcE_v5jGPh5N&A`V8DTysUT_~K>wK&1{N|m}?E}6+| zhlub9`E<&nB6!MqKjR;Bk`}}1hBik7-O_<^L(gmvg*0I#^La}gRwvgVbgh*N>xb+@ zIGWLo!|7yxbiD*D^iFcp{t4Jgw2x@}w2&<4lQ~tE{}^yV4wsBR#DS}ql}tN)Ko%|B42T^ybdcYfX<2!Fv5IrF1Qdci(yj? zmtf->QxEq(X93exp{SDBq|#!FEhX5x#y~g-sZOk7!%AIEDH>nwxY$vGp*5xsp0Rbp U6&qHzBN)8$KK@gRa4{0?f9k5&VgLXD diff --git a/src/group_editor_bot/hooks.py b/src/group_editor_bot/hooks.py index 3a7c2ab..395bfbe 100644 --- a/src/group_editor_bot/hooks.py +++ b/src/group_editor_bot/hooks.py @@ -16,41 +16,44 @@ @hooks.on(events.NewMessage) def command(event): snapshot = event.message_snapshot + account = snapshot.chat.account if not snapshot.text.startswith("/"): return # Not a command - elif snapshot.text == "/invite": + elif snapshot.text.strip() == "/invite": snapshot.chat.send_text(snapshot.chat.get_qr_code()) elif snapshot.text.strip() == "/help": snapshot.chat.send_text(HELP_MSG) - elif snapshot.text == "/pin": + elif snapshot.text.startswith("/pin"): snapshot.chat.send_message(text=snapshot.text[5:], file=snapshot.file) - elif snapshot.text == "/editor": - editor_path = ( + elif snapshot.text.startswith("/editor"): + editor_path = str( importlib.resources.files(__package__) / "durian-realtime-editor-v4.0.4.xdc" ) snapshot.chat.send_message(text=snapshot.text[8:], file=editor_path) - if snapshot.sender != event.account.self_contact: - event.account.delete_messages([snapshot]) + if snapshot.sender != account.self_contact: + account.delete_messages([snapshot]) print(f"Deleted message {snapshot.id}") @hooks.on(events.MemberListChanged) def member_added_or_removed(event): """If a member was added to the group chat, re-send own messages.""" + snapshot = event.message_snapshot + account = snapshot.chat.account + if os.getenv("DEBUG") == "true": + print("member %s was %s" % (event.member, "added" if event.member_added else "removed")) if event.member_added: # If member added to group, resend pads to_resend = [] - for msg in event.chat: - if msg.sender == event.account.self_contact: + for msg in snapshot.chat.get_messages(): + if msg.get_snapshot().sender == account.self_contact and not msg.get_snapshot().is_info: to_resend.append(msg) - event.chat.resend_messages(to_resend) + snapshot.chat.resend_messages(to_resend) else: - if event.member == event.account.self_contact: - delete_data(event.chat) - - + if not snapshot.chat.get_full_snapshot().self_in_group: + delete_data(snapshot.chat) @hooks.on(events.RawEvent) @@ -61,7 +64,7 @@ def catch_events(event): :param event: the event object """ - if os.getenv("DEBUG").lower() == "true": + if os.getenv("DEBUG") == "true": print(event) if event.kind == EventType.IMAP_CONNECTED: event.account.set_config("selfstatus", HELP_MSG) From ca16ac18d26d260c8df93461c87587acda886361 Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 23 Sep 2025 11:39:58 +0200 Subject: [PATCH 3/7] bot deletes its own /invite & /help messages now --- pyproject.toml | 2 +- src/group_editor_bot/hooks.py | 15 ++++++++++----- tests/test_hooks.py | 6 ++++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 942342b..d5b7102 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,7 +52,7 @@ envlist = ["lint","py"] [tool.tox.env_run_base] description = "Run tests under {base_python}" -commands = [["pytest -v -rsXx {posargs}"]] +commands = [["pytest", "-v", "-rsXx {posargs}"]] deps = [ "pytest", "pdbpp", diff --git a/src/group_editor_bot/hooks.py b/src/group_editor_bot/hooks.py index 395bfbe..a622ae5 100644 --- a/src/group_editor_bot/hooks.py +++ b/src/group_editor_bot/hooks.py @@ -1,7 +1,7 @@ import importlib.resources import os -from deltachat_rpc_client import EventType, Chat, events, run_bot_cli +from deltachat_rpc_client import Chat, EventType, events, run_bot_cli hooks = events.HookCollection() @@ -21,9 +21,9 @@ def command(event): if not snapshot.text.startswith("/"): return # Not a command elif snapshot.text.strip() == "/invite": - snapshot.chat.send_text(snapshot.chat.get_qr_code()) + reply = snapshot.chat.send_text(snapshot.chat.get_qr_code()) elif snapshot.text.strip() == "/help": - snapshot.chat.send_text(HELP_MSG) + reply = snapshot.chat.send_text(HELP_MSG) elif snapshot.text.startswith("/pin"): snapshot.chat.send_message(text=snapshot.text[5:], file=snapshot.file) elif snapshot.text.startswith("/editor"): @@ -35,6 +35,9 @@ def command(event): if snapshot.sender != account.self_contact: account.delete_messages([snapshot]) print(f"Deleted message {snapshot.id}") + if "reply" in locals(): + reply.wait_until_delivered() + account.delete_messages([reply]) @hooks.on(events.MemberListChanged) @@ -43,12 +46,14 @@ def member_added_or_removed(event): snapshot = event.message_snapshot account = snapshot.chat.account if os.getenv("DEBUG") == "true": - print("member %s was %s" % (event.member, "added" if event.member_added else "removed")) + change = "added" if event.member_added else "removed" + print("member %s was %s" % (event.member, change)) if event.member_added: # If member added to group, resend pads to_resend = [] for msg in snapshot.chat.get_messages(): - if msg.get_snapshot().sender == account.self_contact and not msg.get_snapshot().is_info: + msg_snap = msg.get_snapshot() + if msg_snap.sender == account.self_contact and not msg_snap.is_info: to_resend.append(msg) snapshot.chat.resend_messages(to_resend) else: diff --git a/tests/test_hooks.py b/tests/test_hooks.py index 96ec7fe..51deb67 100644 --- a/tests/test_hooks.py +++ b/tests/test_hooks.py @@ -19,12 +19,14 @@ def test_delete_data(acfactory): msg = bot.wait_for_incoming_msg() assert len(bot.get_chatlist()) == 3 - delete_data(msg.get_snapshot()) + delete_data(msg.get_snapshot().chat) assert bot.get_contacts() == [] assert len(bot.get_chatlist()) == 2 -@pytest.mark.parametrize(["text", "file", "reply_text", "reply_file"], {[]}) +@pytest.mark.parametrize( + ["text", "file", "reply_text", "reply_file"], [["", "", "", ""]] +) def test_commands(text, file, reply_text, reply_file): pytest.skip("Not yet tested") From 75aa9a49700fceaf5ebb551685cfbdc68c884673 Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 23 Sep 2025 11:42:08 +0200 Subject: [PATCH 4/7] adjusted gitignore to python --- .gitignore | 5 +++++ src/group_editor_bot.egg-info/PKG-INFO | 17 ----------------- src/group_editor_bot.egg-info/SOURCES.txt | 12 ------------ .../dependency_links.txt | 1 - src/group_editor_bot.egg-info/entry_points.txt | 2 -- src/group_editor_bot.egg-info/requires.txt | 7 ------- src/group_editor_bot.egg-info/top_level.txt | 1 - .../__pycache__/__init__.cpython-312.pyc | Bin 162 -> 0 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 5902 -> 0 bytes 9 files changed, 5 insertions(+), 40 deletions(-) delete mode 100644 src/group_editor_bot.egg-info/PKG-INFO delete mode 100644 src/group_editor_bot.egg-info/SOURCES.txt delete mode 100644 src/group_editor_bot.egg-info/dependency_links.txt delete mode 100644 src/group_editor_bot.egg-info/entry_points.txt delete mode 100644 src/group_editor_bot.egg-info/requires.txt delete mode 100644 src/group_editor_bot.egg-info/top_level.txt delete mode 100644 src/group_editor_bot/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/group_editor_bot/__pycache__/hooks.cpython-312.pyc diff --git a/.gitignore b/.gitignore index 33b9450..c85850c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ coverage-percent.out coverage.out group-editor-bot .idea/* +src/*.egg-info/* +.venv/* +build/* +/accounts/ +**/__pycache__/* diff --git a/src/group_editor_bot.egg-info/PKG-INFO b/src/group_editor_bot.egg-info/PKG-INFO deleted file mode 100644 index f16326d..0000000 --- a/src/group_editor_bot.egg-info/PKG-INFO +++ /dev/null @@ -1,17 +0,0 @@ -Metadata-Version: 2.4 -Name: group-editor-bot -Version: 1.0.0 -Summary: Delta Chat bot that manages editors for a group, even when new people join. -Author-email: missytake -Project-URL: Repository, https://github.com/deltachat-bot/group-editor-bot/ -Project-URL: Issues, https://github.com/deltachat-bot/group-editor-bot/issues -Requires-Python: >=3.11 -Description-Content-Type: text/markdown -License-File: LICENSE.txt -Requires-Dist: deltachat-rpc-client -Requires-Dist: deltachat-rpc-server -Provides-Extra: dev -Requires-Dist: pytest; extra == "dev" -Requires-Dist: tox; extra == "dev" -Requires-Dist: ruff; extra == "dev" -Dynamic: license-file diff --git a/src/group_editor_bot.egg-info/SOURCES.txt b/src/group_editor_bot.egg-info/SOURCES.txt deleted file mode 100644 index e3fe391..0000000 --- a/src/group_editor_bot.egg-info/SOURCES.txt +++ /dev/null @@ -1,12 +0,0 @@ -LICENSE.txt -README.md -pyproject.toml -src/group_editor_bot/__init__.py -src/group_editor_bot/hooks.py -src/group_editor_bot.egg-info/PKG-INFO -src/group_editor_bot.egg-info/SOURCES.txt -src/group_editor_bot.egg-info/dependency_links.txt -src/group_editor_bot.egg-info/entry_points.txt -src/group_editor_bot.egg-info/requires.txt -src/group_editor_bot.egg-info/top_level.txt -tests/test_hooks.py \ No newline at end of file diff --git a/src/group_editor_bot.egg-info/dependency_links.txt b/src/group_editor_bot.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/src/group_editor_bot.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/group_editor_bot.egg-info/entry_points.txt b/src/group_editor_bot.egg-info/entry_points.txt deleted file mode 100644 index a6cf5fa..0000000 --- a/src/group_editor_bot.egg-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[console_scripts] -group-editor-bot = group_editor_bot.hooks:main diff --git a/src/group_editor_bot.egg-info/requires.txt b/src/group_editor_bot.egg-info/requires.txt deleted file mode 100644 index 5e78f89..0000000 --- a/src/group_editor_bot.egg-info/requires.txt +++ /dev/null @@ -1,7 +0,0 @@ -deltachat-rpc-client -deltachat-rpc-server - -[dev] -pytest -tox -ruff diff --git a/src/group_editor_bot.egg-info/top_level.txt b/src/group_editor_bot.egg-info/top_level.txt deleted file mode 100644 index 72dd283..0000000 --- a/src/group_editor_bot.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -group_editor_bot diff --git a/src/group_editor_bot/__pycache__/__init__.cpython-312.pyc b/src/group_editor_bot/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 50fcae23cc610275ca5b4eb1cced103d646b9fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmX@j%ge<81c5G>GC=fW5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!a@5br&rQ`YElw@c zPtH$C)lVbNg7NX0d6^~g@p=W7zc_4i^HWN5 ZQtgUZfhIBnaWRPTk(rT^v4|PS0szKWD6aqj diff --git a/src/group_editor_bot/__pycache__/hooks.cpython-312.pyc b/src/group_editor_bot/__pycache__/hooks.cpython-312.pyc deleted file mode 100644 index 459a9ee41c2c835ed56cfaa8fdf88bce7337e864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5902 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 From 68d205366ff32197db38175ba01feb2546893042 Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 23 Sep 2025 12:26:15 +0200 Subject: [PATCH 5/7] Delete non-command messages as well --- src/group_editor_bot/hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/group_editor_bot/hooks.py b/src/group_editor_bot/hooks.py index a622ae5..49d46eb 100644 --- a/src/group_editor_bot/hooks.py +++ b/src/group_editor_bot/hooks.py @@ -19,7 +19,7 @@ def command(event): account = snapshot.chat.account if not snapshot.text.startswith("/"): - return # Not a command + """Not a command""" elif snapshot.text.strip() == "/invite": reply = snapshot.chat.send_text(snapshot.chat.get_qr_code()) elif snapshot.text.strip() == "/help": From 60f5555605e6e04030714f0cebddc80562b1d541 Mon Sep 17 00:00:00 2001 From: missytake Date: Thu, 25 Sep 2025 09:27:28 +0200 Subject: [PATCH 6/7] resend own messages *every* time someone is added to the group chat --- MANIFEST.in | 1 + pyproject.toml | 4 ++-- src/group_editor_bot/hooks.py | 26 +++++++++++++++----------- 3 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 MANIFEST.in diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..f3ff95e --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include src/group_editor_bot/*.xdc diff --git a/pyproject.toml b/pyproject.toml index d5b7102..2036b9b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,8 +10,8 @@ description = "Delta Chat bot that manages editors for a group, even when new pe readme = "file: README.md" requires-python = ">=3.11" dependencies = [ - "deltachat-rpc-client", - "deltachat-rpc-server", + "deltachat-rpc-client>=2.16.0", + "deltachat-rpc-server>=2.16.0", ] [project.urls] diff --git a/src/group_editor_bot/hooks.py b/src/group_editor_bot/hooks.py index 49d46eb..b9a0da7 100644 --- a/src/group_editor_bot/hooks.py +++ b/src/group_editor_bot/hooks.py @@ -44,18 +44,12 @@ def command(event): def member_added_or_removed(event): """If a member was added to the group chat, re-send own messages.""" snapshot = event.message_snapshot - account = snapshot.chat.account if os.getenv("DEBUG") == "true": change = "added" if event.member_added else "removed" print("member %s was %s" % (event.member, change)) if event.member_added: # If member added to group, resend pads - to_resend = [] - for msg in snapshot.chat.get_messages(): - msg_snap = msg.get_snapshot() - if msg_snap.sender == account.self_contact and not msg_snap.is_info: - to_resend.append(msg) - snapshot.chat.resend_messages(to_resend) + resend_messages(snapshot.chat) else: if not snapshot.chat.get_full_snapshot().self_in_group: delete_data(snapshot.chat) @@ -71,6 +65,9 @@ def catch_events(event): """ if os.getenv("DEBUG") == "true": print(event) + if event.kind == EventType.SECUREJOIN_INVITER_PROGRESS: + if event.progress == 1000: + resend_messages(event.account.get_chat_by_id(event.chat_id)) if event.kind == EventType.IMAP_CONNECTED: event.account.set_config("selfstatus", HELP_MSG) event.account.set_config("delete_device_after", "3600") @@ -80,11 +77,18 @@ def catch_events(event): ) -def delete_data(chat: Chat): - """For a message, delete the chat and all contacts which were in it to clean up. +def resend_messages(chat: Chat): + """Resend all own messages (except info messages) in a Chat.""" + to_resend = [] + for msg in chat.get_messages(): + msg_snap = msg.get_snapshot() + if msg_snap.sender == chat.account.self_contact and not msg_snap.is_info: + to_resend.append(msg) + chat.resend_messages(to_resend) - :param msg: a Delta Chat Message snapshot - """ + +def delete_data(chat: Chat): + """For a message, delete the chat and all contacts which were in it to clean up.""" contacts = chat.get_contacts() chat.delete() for member in contacts: From d5f942921eb06245bba19e9bdd3bb0f54d1de778 Mon Sep 17 00:00:00 2001 From: missytake Date: Thu, 25 Sep 2025 09:32:30 +0200 Subject: [PATCH 7/7] change CI to python --- .github/workflows/ci.yml | 92 +++++----------------------------------- tests/test_hooks.py | 2 - 2 files changed, 11 insertions(+), 83 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e071af6..5880127 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,93 +1,23 @@ name: CI on: - push: - branches: [ "master" ] - tags: - - 'v*.*.*' pull_request: - branches: [ "master" ] jobs: - test: runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.12', '3.11'] steps: - - uses: actions/checkout@v3 - - - name: Set up Go - uses: actions/setup-go@v3 - with: - go-version: '1.21' - cache: true - - - name: Test - run: | - export TEST_DEBUG=1 - export TEST_EXTRA_TAGS=" " - bash ./scripts/run_tests.sh - - - name: Coverage Badge - Generate - if: github.event_name != 'pull_request' - uses: tj-actions/coverage-badge-go@v2 - with: - filename: coverage-percent.out - - - name: Verify Changed files - uses: tj-actions/verify-changed-files@v12 - id: verify-changed-files + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 with: - files: README.md - - - name: Commit changes - if: steps.verify-changed-files.outputs.files_changed == 'true' + python-version: ${{ matrix.python-version }} + - name: Install package run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - git add README.md - git commit -m "chore: Update README.md" + python -m pip install --upgrade pip + python -m pip install '.[dev]' + - run: tox - - name: Push changes - if: steps.verify-changed-files.outputs.files_changed == 'true' - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: ${{ github.head_ref }} - - services: - mail_server: - image: ghcr.io/deltachat/mail-server-tester:release - ports: - - 3025:25 - - 3143:143 - - 3465:465 - - 3993:993 - - - release: - needs: test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - run: git fetch --force --tags - - id: check-tag - run: | - if [[ "${{ github.event.ref }}" =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo ::set-output name=match::true - fi - - uses: actions/setup-go@v3 - if: ${{ github.event_name == 'push' && steps.check-tag.outputs.match == 'true' }} - with: - go-version: '1.21' - cache: true - - run: sudo apt install gcc-multilib - - uses: goreleaser/goreleaser-action@v4 - if: ${{ github.event_name == 'push' && steps.check-tag.outputs.match == 'true' }} - with: - distribution: goreleaser - version: latest - args: release --clean - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/tests/test_hooks.py b/tests/test_hooks.py index 51deb67..0160d08 100644 --- a/tests/test_hooks.py +++ b/tests/test_hooks.py @@ -4,8 +4,6 @@ from group_editor_bot.hooks import delete_data -WKD_TIMEOUT = 1 - def test_delete_data(acfactory): if not os.getenv("CHATMAIL_DOMAIN"):