Documentation
¶
Overview ¶
rolecommands is a plugin which allows users to assign roles to themselves
Index ¶
- Constants
- Variables
- func AssignRole(ctx context.Context, ms *dstate.MemberState, cmd *models.RoleCommand) (gaveRole bool, err error)
- func CanAssignRoleCmdTo(r *models.RoleCommand, memberRoles []int64) error
- func CanRole(ctx context.Context, ms *dstate.MemberState, cmd *models.RoleCommand) (can bool, err error)
- func CheckIgnoredRoles(ignore []int64, has []int64) error
- func CheckRequiredRoles(requireOneOf []int64, has []int64) bool
- func CheckToggleRole(ctx context.Context, ms *dstate.MemberState, cmd *models.RoleCommand) (gaveRole bool, err error)
- func ClearRolemenuCache(gID int64)
- func ClearRolemenuCacheGS(gs *dstate.GuildState)
- func CmdFuncListCommands(parsed *dcmd.Data) (interface{}, error)
- func CmdFuncRole(parsed *dcmd.Data) (interface{}, error)
- func ContinueRoleMenuSetup(ctx context.Context, rm *models.RoleMenu, emoji *discordgo.Emoji, userID int64) (resp string, err error)
- func FindRolemenuFull(ctx context.Context, mID int64, guildID int64) (*models.RoleMenu, error)
- func FindToggleRole(ctx context.Context, ms *dstate.MemberState, name string) (gaveRole bool, err error)
- func GetAllRoleCommandsSorted(ctx context.Context, guildID int64) (groups []*models.RoleGroup, ...)
- func GetRolemenuCached(ctx context.Context, gs *dstate.GuildState, messageID int64) (*models.RoleMenu, error)
- func GroupCanRole(ctx context.Context, ms *dstate.MemberState, targetRole *models.RoleCommand) (can bool, err error)
- func GroupMaybeScheduleRoleRemoval(ctx context.Context, ms *dstate.MemberState, targetRole *models.RoleCommand) error
- func GroupToggleRole(ctx context.Context, ms *dstate.MemberState, targetRole *models.RoleCommand) (gaveRole bool, err error)
- func HandleDeleteRoleCommands(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func HandleGetGroup(groupID int64, w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
- func HandleGetIndex(w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
- func HandleMoveCommand(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func HandleNewCommand(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func HandleNewGroup(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func HandleRemoveCommand(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func HandleRemoveGroup(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func HandleUpdateCommand(w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
- func HandleUpdateGroup(w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
- func HumanizeAssignError(guild *dstate.GuildState, err error) (string, error)
- func IsRoleCommandError(err error) bool
- func MemberChooseOption(ctx context.Context, rm *models.RoleMenu, gs *dstate.GuildState, ...) (resp string, err error)
- func MenuReactedNotDone(ctx context.Context, rm *models.RoleMenu, emoji *discordgo.Emoji, userID int64) (resp string, err error)
- func NewGroupError(msg string, group *models.RoleGroup) error
- func NewLmitError(msg string, limit int) error
- func NewRoleError(msg string, role int64) error
- func NewSimpleError(format string, args ...interface{}) error
- func NextRoleMenuSetupStep(ctx context.Context, rm *models.RoleMenu, first bool) (resp string, err error)
- func OptionsLessFunc(slice []*models.RoleMenuOption) func(int, int) bool
- func RegisterPlugin()
- func RemoveRole(ctx context.Context, ms *dstate.MemberState, cmd *models.RoleCommand) (removedRole bool, err error)
- func RoleCommandsLessFunc(slice []*models.RoleCommand) func(int, int) bool
- func StrFlags(rm *models.RoleMenu) string
- func StringCommands(cmds []*models.RoleCommand) string
- func ToggleRole(ms *dstate.MemberState, role int64) (gaveRole bool, err error)
- func UpdateMenu(parsed *dcmd.Data, menu *models.RoleMenu) (interface{}, error)
- func UpdateRoleMenuMessage(ctx context.Context, rm *models.RoleMenu) error
- type FormCommand
- type FormGroup
- type GroupError
- type LmitError
- type MenuCacheKey
- type Plugin
- type RecentMenusTracker
- type RecentTrackedMenu
- type RoleError
- type ScheduledMemberRoleRemoveData
- type SimpleError
Constants ¶
const ( GroupModeNone = iota GroupModeSingle GroupModeMultiple )
const ( RoleMenuStateSettingUp = 0 RoleMenuStateDone = 1 RoleMenuStateEditingOptionSelecting = 2 RoleMenuStateEditingOptionReplacing = 3 )
Variables ¶
var DBSchemas = []string{`
CREATE TABLE IF NOT EXISTS role_groups (
id bigserial NOT NULL PRIMARY KEY,
guild_id bigint NOT NULL,
name text NOT NULL,
require_roles bigint[],
ignore_roles bigint[],
mode bigint NOT NULL,
multiple_max bigint NOT NULL,
multiple_min bigint NOT NULL,
single_auto_toggle_off boolean NOT NULL,
single_require_one boolean NOT NULL
);
`, `
CREATE INDEX IF NOT EXISTS role_groups_guild_idx ON role_groups(guild_id);
`, `
CREATE TABLE IF NOT EXISTS role_commands (
id bigserial NOT NULL PRIMARY KEY,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
guild_id bigint NOT NULL,
name text NOT NULL,
role_group_id bigint REFERENCES role_groups(id) ON DELETE SET NULL,
role bigint NOT NULL,
require_roles bigint[],
ignore_roles bigint[],
position bigint NOT NULL
);
`, `
CREATE INDEX IF NOT EXISTS role_commands_guild_idx ON role_commands(guild_id);
`, `
CREATE INDEX IF NOT EXISTS role_commands_role_group_idx ON role_commands(role_group_id);
`, `
CREATE TABLE IF NOT EXISTS role_menus (
message_id bigint NOT NULL PRIMARY KEY,
guild_id bigint NOT NULL,
channel_id bigint NOT NULL,
owner_id bigint NOT NULL,
own_message boolean NOT NULL,
state bigint NOT NULL,
next_role_command_id bigint REFERENCES role_commands(id) ON DELETE SET NULL,
role_group_id bigint REFERENCES role_groups(id) ON DELETE CASCADE
);
`, `
ALTER TABLE role_menus ADD COLUMN IF NOT EXISTS disable_send_dm BOOLEAN NOT NULL DEFAULT false;
`, `
ALTER TABLE role_menus ADD COLUMN IF NOT EXISTS remove_role_on_reaction_remove BOOLEAN NOT NULL DEFAULT false;
`, `
ALTER TABLE role_menus ADD COLUMN IF NOT EXISTS fixed_amount BOOLEAN NOT NULL DEFAULT false;
`, `
ALTER TABLE role_menus ADD COLUMN IF NOT EXISTS skip_amount INT NOT NULL DEFAULT 0;
`, `
ALTER TABLE role_menus ADD COLUMN IF NOT EXISTS setup_msg_id BIGINT NOT NULL DEFAULT 0;
`, `
CREATE INDEX IF NOT EXISTS role_menus_setup_msg_idx ON role_menus(setup_msg_id);
`, `
CREATE TABLE IF NOT EXISTS role_menu_options (
id bigserial NOT NULL PRIMARY KEY,
role_command_id bigint REFERENCES role_commands(id) ON DELETE CASCADE,
emoji_id bigint NOT NULL,
unicode_emoji text NOT NULL,
role_menu_id bigint NOT NULL REFERENCES role_menus(message_id) ON DELETE CASCADE
);
`, `
ALTER TABLE role_menus ADD COLUMN IF NOT EXISTS editing_option_id BIGINT;
`, `
DO $$
BEGIN
BEGIN
ALTER TABLE role_menus ADD CONSTRAINT role_menus_editing_option_id_fkey FOREIGN KEY (editing_option_id) REFERENCES role_menu_options(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN RAISE NOTICE 'Table constraint role_menus.role_menus_editing_option_id_fkey already exists';
END;
END $$;
`, `
ALTER TABLE role_menu_options ADD COLUMN IF NOT EXISTS emoji_animated BOOLEAN NOT NULL DEFAULT false;
`, `
CREATE INDEX IF NOT EXISTS role_menu_options_role_command_idx ON role_menu_options(role_command_id);
`, `
CREATE INDEX IF NOT EXISTS role_menu_options_role_menu_id_idx ON role_menu_options(role_menu_id);
`, `
ALTER TABLE role_groups ADD COLUMN IF NOT EXISTS temporary_role_duration INT NOT NULL DEFAULT 0;
`}
Functions ¶
func AssignRole ¶
func CanAssignRoleCmdTo ¶
func CanAssignRoleCmdTo(r *models.RoleCommand, memberRoles []int64) error
func CheckIgnoredRoles ¶
func CheckRequiredRoles ¶
func CheckToggleRole ¶ added in v1.7.0
func CheckToggleRole(ctx context.Context, ms *dstate.MemberState, cmd *models.RoleCommand) (gaveRole bool, err error)
AssignRole attempts to assign the given role command, returns an error if the role does not exists or is unable to receie said role
func ClearRolemenuCache ¶ added in v1.24.18
func ClearRolemenuCache(gID int64)
func ClearRolemenuCacheGS ¶ added in v1.24.18
func ClearRolemenuCacheGS(gs *dstate.GuildState)
func CmdFuncListCommands ¶
func CmdFuncRole ¶
func ContinueRoleMenuSetup ¶
func FindRolemenuFull ¶ added in v1.8.0
func FindToggleRole ¶ added in v1.7.0
func GetRolemenuCached ¶ added in v1.24.18
func GroupCanRole ¶ added in v1.7.0
func GroupMaybeScheduleRoleRemoval ¶ added in v1.13.1
func GroupMaybeScheduleRoleRemoval(ctx context.Context, ms *dstate.MemberState, targetRole *models.RoleCommand) error
func GroupToggleRole ¶ added in v1.7.0
func GroupToggleRole(ctx context.Context, ms *dstate.MemberState, targetRole *models.RoleCommand) (gaveRole bool, err error)
AssignRoleToMember attempts to assign the given role command, part of this group to the member
func HandleDeleteRoleCommands ¶ added in v1.20.17
func HandleDeleteRoleCommands(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func HandleGetGroup ¶ added in v1.4.1
func HandleGetGroup(groupID int64, w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
func HandleGetIndex ¶ added in v1.4.1
func HandleGetIndex(w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
func HandleMoveCommand ¶
func HandleMoveCommand(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func HandleNewCommand ¶
func HandleNewCommand(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func HandleNewGroup ¶
func HandleNewGroup(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func HandleRemoveCommand ¶
func HandleRemoveCommand(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func HandleRemoveGroup ¶
func HandleRemoveGroup(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func HandleUpdateCommand ¶
func HandleUpdateCommand(w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
func HandleUpdateGroup ¶
func HandleUpdateGroup(w http.ResponseWriter, r *http.Request) (tmpl web.TemplateData, err error)
func HumanizeAssignError ¶
func IsRoleCommandError ¶
func MemberChooseOption ¶
func MenuReactedNotDone ¶ added in v1.8.0
func NewLmitError ¶
func NewRoleError ¶
func NewSimpleError ¶
func NextRoleMenuSetupStep ¶
func OptionsLessFunc ¶ added in v1.8.0
func OptionsLessFunc(slice []*models.RoleMenuOption) func(int, int) bool
func RegisterPlugin ¶
func RegisterPlugin()
func RemoveRole ¶ added in v1.7.0
func RoleCommandsLessFunc ¶
func RoleCommandsLessFunc(slice []*models.RoleCommand) func(int, int) bool
func StringCommands ¶
func StringCommands(cmds []*models.RoleCommand) string
StringCommands pretty formats a bunch of commands into a string
func ToggleRole ¶
ToggleRole toggles the role of a guildmember, adding it if the member does not have the role and removing it if they do
Types ¶
type FormCommand ¶
type GroupError ¶
func (*GroupError) Error ¶
func (r *GroupError) Error() string
type MenuCacheKey ¶ added in v1.24.18
type MenuCacheKey int64
type Plugin ¶
type Plugin struct{}
func (*Plugin) AddCommands ¶ added in v1.4.1
func (p *Plugin) AddCommands()
func (*Plugin) LoadServerHomeWidget ¶ added in v1.17.0
func (p *Plugin) LoadServerHomeWidget(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func (*Plugin) PluginInfo ¶ added in v1.17.0
func (p *Plugin) PluginInfo() *common.PluginInfo
type RecentMenusTracker ¶ added in v1.24.18
type RecentMenusTracker struct { RecentMenus []*RecentTrackedMenu Started time.Time EvictionAge time.Duration // contains filtered or unexported fields }
RecentMenusTracker is simply a way to reduce database queries We keep a small cache of message id's with menus on them created recently, that way we don't need to query the database on all messages with reactions on them if they're created within this tracked time interval
func NewRecentMenusTracker ¶ added in v1.24.18
func NewRecentMenusTracker(evictionTreshold time.Duration) *RecentMenusTracker
func (*RecentMenusTracker) AddMenu ¶ added in v1.24.18
func (r *RecentMenusTracker) AddMenu(msgID int64)
func (*RecentMenusTracker) CheckRecentTrackedMenu ¶ added in v1.24.18
func (r *RecentMenusTracker) CheckRecentTrackedMenu(msgID int64) (outOfTimeRange bool, checkDB bool)
func (*RecentMenusTracker) RunLoop ¶ added in v1.24.18
func (r *RecentMenusTracker) RunLoop()
type RecentTrackedMenu ¶ added in v1.24.18
type RecentTrackedMenu struct { MsgID int64 // contains filtered or unexported fields }
type ScheduledMemberRoleRemoveData ¶ added in v1.13.1
type SimpleError ¶
type SimpleError string
Just a simple type but distinguishable from errors.Error
func (SimpleError) Error ¶
func (s SimpleError) Error() string