Documentation ¶
Index ¶
- Variables
- func FormatHelp(ce *Event) string
- func NetworkAPIImplements[T bridgev2.NetworkAPI](val bridgev2.NetworkAPI) bool
- func NetworkConnectorImplements[T bridgev2.NetworkConnector](val bridgev2.NetworkConnector) bool
- func NewProcessor(bridge *bridgev2.Bridge) bridgev2.CommandProcessor
- func StoreCommandState(user *bridgev2.User, cs *CommandState)
- type AliasedCommandHandler
- type CommandHandler
- type CommandState
- type Event
- type FullHandler
- type HelpMeta
- type HelpSection
- type HelpfulHandler
- type ImplementationChecker
- type MinimalCommandHandler
- type MinimalCommandHandlerFunc
- type Processor
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // Deprecated: this should be used as a placeholder that needs to be fixed HelpSectionUnclassified = HelpSection{"Unclassified", -1} HelpSectionGeneral = HelpSection{"General", 0} HelpSectionAuth = HelpSection{"Authentication", 10} HelpSectionChats = HelpSection{"Starting and managing chats", 20} HelpSectionAdmin = HelpSection{"Administration", 50} )
View Source
var CommandCancel = &FullHandler{ Func: func(ce *Event) { state := SwapCommandState(ce.User, nil) if state != nil { action := state.Action if action == "" { action = "Unknown action" } if state.Cancel != nil { state.Cancel() } ce.Reply("%s cancelled.", action) } else { ce.Reply("No ongoing command.") } }, Name: "cancel", Help: HelpMeta{ Section: HelpSectionGeneral, Description: "Cancel an ongoing action.", }, }
View Source
var CommandDeleteAllPortals = &FullHandler{ Func: func(ce *Event) { portals, err := ce.Bridge.GetAllPortals(ce.Ctx) if err != nil { ce.Reply("Failed to get portals: %v", err) return } bridgev2.DeleteManyPortals(ce.Ctx, portals, func(portal *bridgev2.Portal, delete bool, err error) { if !delete { ce.Reply("Failed to delete portal %s: %v", portal.MXID, err) } else { ce.Reply("Failed to clean up room %s: %v", portal.MXID, err) } }) }, Name: "delete-all-portals", Help: HelpMeta{ Section: HelpSectionAdmin, Description: "Delete all portals the bridge knows about", }, RequiresAdmin: true, }
View Source
var CommandDeletePortal = &FullHandler{ Func: func(ce *Event) { err := ce.Portal.Delete(ce.Ctx) if err != nil { ce.Reply("Failed to delete portal: %v", err) return } err = ce.Bot.DeleteRoom(ce.Ctx, ce.Portal.MXID, false) if err != nil { ce.Reply("Failed to clean up room: %v", err) } ce.MessageStatus.DisableMSS = true }, Name: "delete-portal", Help: HelpMeta{ Section: HelpSectionAdmin, Description: "Delete the current portal room", }, RequiresAdmin: true, RequiresPortal: true, }
View Source
var CommandDoIn = &FullHandler{ Func: fnDoIn, Name: "doin", Aliases: []string{"do-in", "runin", "run-in"}, Help: HelpMeta{ Section: HelpSectionAdmin, Description: "Run a command in a different room.", Args: "<_room ID_> <_command_> [_args..._]", }, }
View Source
var CommandHelp = &FullHandler{ Func: func(ce *Event) { ce.Reply(FormatHelp(ce)) }, Name: "help", Help: HelpMeta{ Section: HelpSectionGeneral, Description: "Show this help message.", }, }
View Source
var CommandListLogins = &FullHandler{ Func: fnListLogins, Name: "list-logins", Help: HelpMeta{ Section: HelpSectionAuth, Description: "List your logins", }, RequiresLoginPermission: true, }
View Source
var CommandLogin = &FullHandler{ Func: fnLogin, Name: "login", Help: HelpMeta{ Section: HelpSectionAuth, Description: "Log into the bridge", Args: "[_flow ID_]", }, RequiresLoginPermission: true, }
View Source
var CommandLogout = &FullHandler{ Func: fnLogout, Name: "logout", Help: HelpMeta{ Section: HelpSectionAuth, Description: "Log out of the bridge", Args: "<_login ID_>", }, }
View Source
var CommandRegisterPush = &FullHandler{ Func: func(ce *Event) { if len(ce.Args) < 3 { ce.Reply("Usage: `$cmdprefix debug-register-push <login ID> <push type> <push token>`\n\nYour logins:\n\n%s", ce.User.GetFormattedUserLogins()) return } pushType := bridgev2.PushTypeFromString(ce.Args[1]) if pushType == bridgev2.PushTypeUnknown { ce.Reply("Unknown push type `%s`. Allowed types: `web`, `apns`, `fcm`", ce.Args[1]) return } login := ce.Bridge.GetCachedUserLoginByID(networkid.UserLoginID(ce.Args[0])) if login == nil || login.UserMXID != ce.User.MXID { ce.Reply("Login `%s` not found", ce.Args[0]) return } pushable, ok := login.Client.(bridgev2.PushableNetworkAPI) if !ok { ce.Reply("This network connector does not support push registration") return } pushToken := strings.Join(ce.Args[2:], " ") if pushToken == "null" { pushToken = "" } err := pushable.RegisterPushNotifications(ce.Ctx, pushType, pushToken) if err != nil { ce.Reply("Failed to register pusher: %v", err) return } if pushToken == "" { ce.Reply("Pusher de-registered successfully") } else { ce.Reply("Pusher registered successfully") } }, Name: "debug-register-push", Help: HelpMeta{ Section: HelpSectionAdmin, Description: "Register a pusher", Args: "<_login ID_> <_push type_> <_push token_>", }, RequiresAdmin: true, RequiresLogin: true, NetworkAPI: NetworkAPIImplements[bridgev2.PushableNetworkAPI], }
View Source
var CommandRelogin = &FullHandler{ Func: fnLogin, Name: "relogin", Help: HelpMeta{ Section: HelpSectionAuth, Description: "Re-authenticate an existing login", Args: "<_login ID_> [_flow ID_]", }, RequiresLoginPermission: true, }
View Source
var CommandResolveIdentifier = &FullHandler{ Func: fnResolveIdentifier, Name: "resolve-identifier", Help: HelpMeta{ Section: HelpSectionChats, Description: "Check if a given identifier is on the remote network", Args: "[_login ID_] <_identifier_>", }, RequiresLogin: true, NetworkAPI: NetworkAPIImplements[bridgev2.IdentifierResolvingNetworkAPI], }
View Source
var CommandSearch = &FullHandler{ Func: fnSearch, Name: "search", Help: HelpMeta{ Section: HelpSectionChats, Description: "Search for users on the remote network", Args: "<_query_>", }, RequiresLogin: true, NetworkAPI: NetworkAPIImplements[bridgev2.UserSearchingNetworkAPI], }
View Source
var CommandSetPreferredLogin = &FullHandler{ Func: fnSetPreferredLogin, Name: "set-preferred-login", Aliases: []string{"prefer"}, Help: HelpMeta{ Section: HelpSectionAuth, Description: "Set the preferred login ID for sending messages to this portal (only relevant when logged into multiple accounts via the bridge)", Args: "<_login ID_>", }, RequiresPortal: true, RequiresLoginPermission: true, }
View Source
var CommandSetRelay = &FullHandler{ Func: fnSetRelay, Name: "set-relay", Help: HelpMeta{ Section: HelpSectionAuth, Description: "Use your account to relay messages sent by users who haven't logged in", Args: "[_login ID_]", }, RequiresPortal: true, }
View Source
var CommandStartChat = &FullHandler{ Func: fnResolveIdentifier, Name: "start-chat", Aliases: []string{"pm"}, Help: HelpMeta{ Section: HelpSectionChats, Description: "Start a direct chat with the given user", Args: "[_login ID_] <_identifier_>", }, RequiresLogin: true, NetworkAPI: NetworkAPIImplements[bridgev2.IdentifierResolvingNetworkAPI], }
View Source
var CommandSudo = &FullHandler{ Func: fnSudo, Name: "sudo", Aliases: []string{"doas", "do-as", "runas", "run-as"}, Help: HelpMeta{ Section: HelpSectionAdmin, Description: "Run a command as a different user.", Args: "[--create] <_user ID_> <_command_> [_args..._]", }, RequiresAdmin: true, }
View Source
var CommandUnsetRelay = &FullHandler{ Func: fnUnsetRelay, Name: "unset-relay", Help: HelpMeta{ Section: HelpSectionAuth, Description: "Stop relaying messages sent by users who haven't logged in", }, RequiresPortal: true, }
Functions ¶
func FormatHelp ¶
func NetworkAPIImplements ¶ added in v0.23.0
func NetworkAPIImplements[T bridgev2.NetworkAPI](val bridgev2.NetworkAPI) bool
func NetworkConnectorImplements ¶ added in v0.23.0
func NetworkConnectorImplements[T bridgev2.NetworkConnector](val bridgev2.NetworkConnector) bool
func NewProcessor ¶
func NewProcessor(bridge *bridgev2.Bridge) bridgev2.CommandProcessor
NewProcessor creates a Processor
func StoreCommandState ¶
func StoreCommandState(user *bridgev2.User, cs *CommandState)
Types ¶
type AliasedCommandHandler ¶
type AliasedCommandHandler interface { CommandHandler GetAliases() []string }
type CommandHandler ¶
type CommandHandler interface { MinimalCommandHandler GetName() string }
type CommandState ¶
type CommandState struct { Next MinimalCommandHandler Action string Meta any Cancel func() }
func LoadCommandState ¶
func LoadCommandState(user *bridgev2.User) *CommandState
func SwapCommandState ¶
func SwapCommandState(user *bridgev2.User, cs *CommandState) *CommandState
type Event ¶
type Event struct { Bot bridgev2.MatrixAPI Bridge *bridgev2.Bridge Portal *bridgev2.Portal Processor *Processor Handler MinimalCommandHandler RoomID id.RoomID OrigRoomID id.RoomID EventID id.EventID User *bridgev2.User Command string Args []string RawArgs string ReplyTo id.EventID Ctx context.Context Log *zerolog.Logger MessageStatus *bridgev2.MessageStatus }
Event stores all data which might be used to handle commands
func (*Event) Reply ¶
Reply sends a reply to command as notice, with optional string formatting and automatic $cmdprefix replacement.
func (*Event) ReplyAdvanced ¶
ReplyAdvanced sends a reply to command as notice. It allows using HTML and disabling markdown, but doesn't have built-in string formatting.
type FullHandler ¶
type FullHandler struct { Func func(*Event) Name string Aliases []string Help HelpMeta RequiresAdmin bool RequiresPortal bool RequiresLogin bool RequiresEventLevel event.Type RequiresLoginPermission bool NetworkAPI ImplementationChecker[bridgev2.NetworkAPI] NetworkConnector ImplementationChecker[bridgev2.NetworkConnector] }
func (*FullHandler) GetAliases ¶
func (fh *FullHandler) GetAliases() []string
func (*FullHandler) GetHelp ¶
func (fh *FullHandler) GetHelp() HelpMeta
func (*FullHandler) GetName ¶
func (fh *FullHandler) GetName() string
func (*FullHandler) ImplementationsFulfilled ¶ added in v0.23.0
func (fh *FullHandler) ImplementationsFulfilled(ce *Event) bool
func (*FullHandler) Run ¶
func (fh *FullHandler) Run(ce *Event)
func (*FullHandler) ShowInHelp ¶
func (fh *FullHandler) ShowInHelp(ce *Event) bool
type HelpMeta ¶
type HelpMeta struct { Command string Section HelpSection Description string Args string }
type HelpSection ¶
type HelpfulHandler ¶
type HelpfulHandler interface { CommandHandler GetHelp() HelpMeta ShowInHelp(*Event) bool }
type ImplementationChecker ¶ added in v0.23.0
type MinimalCommandHandler ¶
type MinimalCommandHandler interface {
Run(*Event)
}
type MinimalCommandHandlerFunc ¶
type MinimalCommandHandlerFunc func(*Event)
func (MinimalCommandHandlerFunc) Run ¶
func (mhf MinimalCommandHandlerFunc) Run(ce *Event)
type Processor ¶
type Processor struct {
// contains filtered or unexported fields
}
func (*Processor) AddHandler ¶
func (proc *Processor) AddHandler(handler CommandHandler)
func (*Processor) AddHandlers ¶
func (proc *Processor) AddHandlers(handlers ...CommandHandler)
Click to show internal directories.
Click to hide internal directories.