// mautrix-telegram - A Matrix-Telegram puppeting bridge. // Copyright (C) 2025 Sumner Evans // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . package connector import ( "slices" "strings" _ "golang.org/x/image/webp" "maunium.net/go/mautrix/bridgev2" "maunium.net/go/mautrix/bridgev2/commands" "maunium.net/go/mautrix/bridgev2/networkid" "maunium.net/go/mautrix/format" ) var cmdSyncChats = &commands.FullHandler{ Func: fnSyncChats, Name: "sync-chats", Help: commands.HelpMeta{ Section: commands.HelpSectionChats, Description: "Synchronize your chats", Args: "[_login ID_]", }, RequiresLogin: true, } func fnSyncChats(ce *commands.Event) { logins := ce.User.GetUserLogins() if len(ce.Args) > 0 { logins = slices.DeleteFunc(logins, func(login *bridgev2.UserLogin) bool { return !slices.Contains(ce.Args, string(login.ID)) }) if len(logins) == 0 { ce.Reply("No matching logins found with provided ID(s)") return } } for _, login := range logins { client := login.Client.(*TelegramClient) if err := client.syncChats(ce.Ctx, 0, false, true); err != nil { ce.Reply("Failed to synchronize chats for %s: %v", format.SafeMarkdownCode(login.ID), err) } else { ce.Reply("Successfully synchronized chats for %s", format.SafeMarkdownCode(login.ID)) } } } var cmdEmojiPack = &commands.FullHandler{ Func: fnEmojiPack, Name: "emoji-pack", Aliases: []string{"pack", "sticker-pack", "emojipack", "stickerpack"}, Help: commands.HelpMeta{ Section: commands.HelpSectionChats, Description: "Bridge emoji packs between Matrix and Telegram.", Args: " [args...]", }, RequiresLogin: true, } const emojiPackHelp = `This command can be used to transfer emoji packs between Matrix and Telegram. * $cmdprefix emoji-pack upload - Transfer a pack from Matrix to Telegram. * $cmdprefix emoji-pack download - Transfer a pack from Telegram to Matrix. * $cmdprefix emoji-pack list - List your current emoji packs on Telegram. * $cmdprefix emoji-pack help - Show this help message.` func fnEmojiPack(ce *commands.Event) { var login *bridgev2.UserLogin if len(ce.Args) > 0 { targetLogin := ce.Bridge.GetCachedUserLoginByID(networkid.UserLoginID(ce.Args[0])) if targetLogin != nil && targetLogin.UserMXID == ce.User.MXID { ce.Args = ce.Args[1:] login = targetLogin } } var command string if len(ce.Args) > 0 { command = strings.ToLower(ce.Args[0]) ce.Args = ce.Args[1:] } if login == nil { login = ce.User.GetDefaultLogin() if login == nil { ce.Reply("You're not logged in.") return } } client := login.Client.(*TelegramClient) switch command { case "help", "": ce.Reply(emojiPackHelp) case "list": client.fnListEmojiPacks(ce) case "upload": client.fnUploadEmojiPack(ce) case "download": client.fnDownloadEmojiPack(ce) default: ce.Reply("Usage: `$cmdprefix emoji-pack [args...]`") } }