groupme/commands.go

116 lines
3.1 KiB
Go
Raw Permalink Normal View History

// mautrix-groupme - A Matrix-GroupMe puppeting bridge.
// Copyright (C) 2022 Sumner Evans, Karmanyaah Malhotra
//
// 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 <https://www.gnu.org/licenses/>.
package main
import (
"maunium.net/go/mautrix/bridge/commands"
)
type WrappedCommandEvent struct {
*commands.Event
Bridge *GMBridge
User *User
Portal *Portal
}
func wrapCommand(handler func(*WrappedCommandEvent)) func(*commands.Event) {
return func(ce *commands.Event) {
user := ce.User.(*User)
var portal *Portal
if ce.Portal != nil {
portal = ce.Portal.(*Portal)
}
br := ce.Bridge.Child.(*GMBridge)
handler(&WrappedCommandEvent{ce, br, user, portal})
2021-02-28 19:59:03 +00:00
}
}
var (
HelpSectionConnectionManagement = commands.HelpSection{Name: "Connection management", Order: 11}
HelpSectionCreatingPortals = commands.HelpSection{Name: "Creating portals", Order: 15}
HelpSectionPortalManagement = commands.HelpSection{Name: "Portal management", Order: 20}
HelpSectionInvites = commands.HelpSection{Name: "Group invites", Order: 25}
HelpSectionMiscellaneous = commands.HelpSection{Name: "Miscellaneous", Order: 30}
)
2021-02-28 19:59:03 +00:00
func (br *GMBridge) RegisterCommands() {
proc := br.CommandProcessor.(*commands.Processor)
proc.AddHandlers(
// cmdSetRelay,
// cmdUnsetRelay,
// cmdInviteLink,
// cmdResolveLink,
// cmdJoin,
// cmdAccept,
// cmdCreate,
cmdLogin,
// cmdLogout,
// cmdTogglePresence,
// cmdDeleteSession,
// cmdReconnect,
// cmdDisconnect,
// cmdPing,
// cmdDeletePortal,
// cmdDeleteAllPortals,
// cmdBackfill,
// cmdList,
// cmdSearch,
// cmdOpen,
// cmdPM,
// cmdSync,
// cmdDisappearingTimer,
)
}
var cmdLogin = &commands.FullHandler{
Func: wrapCommand(fnLogin),
Name: "login",
Help: commands.HelpMeta{
Section: commands.HelpSectionAuth,
Description: "Link the bridge to your GroupMe account.",
},
}
func fnLogin(ce *WrappedCommandEvent) {
2023-09-15 19:57:55 +00:00
if ce.Args != nil && len(ce.Args) > 0 {
_, err := ce.Bot.RedactEvent(ce.RoomID, ce.EventID)
if err != nil {
ce.User.log.Errorln("Failed to redact auth token")
}
}
if ce.User.Client != nil {
if ce.User.IsConnected() {
ce.Reply("You're already logged in")
2021-02-28 19:59:03 +00:00
} else {
ce.Reply("You're already logged in. Perhaps you wanted to `reconnect`?")
2021-02-28 19:59:03 +00:00
}
return
}
if len(ce.Args) < 1 {
ce.Reply(`Get your access token from https://dev.groupme.com/ which should be the first argument to login`)
2021-02-28 19:59:03 +00:00
return
}
2021-02-13 05:53:35 +00:00
err := ce.User.Login(ce.Args[0])
if err != nil {
ce.Reply("Failed to log in: %v", err)
2021-02-28 19:59:03 +00:00
}
ce.Reply("Logged in successfully!")
}