Documentation ¶
Index ¶
- Constants
- Variables
- func HandleChannelUpdate(evt *eventsystem.EventData) (retry bool, err error)
- func HandleGuildMemberAdd(evtData *eventsystem.EventData) (retry bool, err error)
- func HandleGuildMemberRemove(evt *eventsystem.EventData) (retry bool, err error)
- func HandleNotificationsGet(w http.ResponseWriter, r *http.Request) interface{}
- func HandleNotificationsPost(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
- func RegisterPlugin()
- func SaveConfig(config *Config) error
- type Config
- type Plugin
Constants ¶
View Source
const MaxResponses = 10
View Source
const RecordSeparator = "\x1e"
Variables ¶
View Source
var DBSchemas = []string{`
CREATE TABLE IF NOT EXISTS general_notification_configs (
guild_id BIGINT PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
-- Many of the following columns should be non-nullable, but were originally
-- managed by gorm (which does not add NOT NULL constraints by default) so are
-- missing them. Unfortunately, it is unfeasible to retroactively fill missing
-- values with defaults and add the constraints as there are simply too many
-- rows in production.
-- For similar legacy reasons, many fields that should have type BIGINT are TEXT.
join_server_enabled BOOLEAN,
join_server_channel TEXT,
-- This column should be a TEXT[]. But for legacy reasons, it is instead a single
-- TEXT column containing all template responses joined together and delimited by
-- the character U+001E (INFORMATION SEPARATOR TWO.)
join_dm_enabled BOOLEAN,
join_dm_msg TEXT,
leave_enabled BOOLEAN,
leave_channel TEXT,
topic_enabled BOOLEAN,
topic_channel TEXT,
censor_invites BOOLEAN
);
`, `
-- Tables created with gorm have missing NOT NULL constraints for created_at and
-- updated_at columns; since these columns are never null in existing rows, we can
-- retraoctively add the constraints without needing to update any data.
ALTER TABLE general_notification_configs ALTER COLUMN created_at SET NOT NULL;
`, `
ALTER TABLE general_notification_configs ALTER COLUMN updated_at SET NOT NULL;
`,
`
ALTER TABLE general_notification_configs ADD COLUMN IF NOT EXISTS join_server_msgs TEXT;
`, `
ALTER TABLE general_notification_configs ADD COLUMN IF NOT EXISTS leave_msgs TEXT;
`, `
-- Now the more complicated migration. For legacy reasons, the general_notification_configs
-- table previously contained two pairs of columns for join and leave message:
-- * join_server_msg, join_server_msgs_
-- * leave_msg, leave_msgs_
-- all of type TEXT. (The variants with _ were added when multiple-response support was
-- implemented and contain the individual responses separated by U+001E as described
-- previously.)
-- Ideally, we only have one column for each message. We achieve this state with the following
-- multi-step migration:
-- 1. Update old records with join_server_msg != '' or leave_msg != '' to use the plural
-- join_server_msgs_ and leave_msgs_ columns respectively.
-- 2. Drop the join_server_msg and leave_msg columns.
-- 3. Rename join_server_msgs_ to join_server_msgs and leave_msgs_ to leave_msgs.
-- Here goes.
DO $$
BEGIN
-- only run if general_notifcation_configs.join_server_msg (indicative of legacy table) exists
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='general_notification_configs' AND column_name='join_server_msgs')
AND EXISTS(SELECT 1 FROM information_schema.columns WHERE table_name='general_notification_configs' AND column_name='join_server_msg') THEN
UPDATE general_notification_configs SET join_server_msgs_ = join_server_msg WHERE join_server_msg != '';
UPDATE general_notification_configs SET leave_msgs_ = leave_msg WHERE leave_msg != '';
ALTER TABLE general_notification_configs DROP COLUMN join_server_msg;
ALTER TABLE general_notification_configs DROP COLUMN leave_msg;
ALTER TABLE general_notification_configs RENAME COLUMN join_server_msgs_ to join_server_msgs;
ALTER TABLE general_notification_configs RENAME COLUMN leave_msgs_ to leave_msgs;
END IF;
END $$;
`}
View Source
var PageHTML string
Functions ¶
func HandleChannelUpdate ¶
func HandleChannelUpdate(evt *eventsystem.EventData) (retry bool, err error)
func HandleGuildMemberAdd ¶
func HandleGuildMemberAdd(evtData *eventsystem.EventData) (retry bool, err error)
func HandleGuildMemberRemove ¶
func HandleGuildMemberRemove(evt *eventsystem.EventData) (retry bool, err error)
func HandleNotificationsGet ¶
func HandleNotificationsGet(w http.ResponseWriter, r *http.Request) interface{}
func HandleNotificationsPost ¶
func HandleNotificationsPost(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func RegisterPlugin ¶
func RegisterPlugin()
func SaveConfig ¶ added in v2.40.0
Types ¶
type Config ¶
type Config struct { GuildID int64 CreatedAt time.Time UpdatedAt time.Time JoinServerEnabled bool `json:"join_server_enabled" schema:"join_server_enabled"` JoinServerChannel int64 `json:"join_server_channel" schema:"join_server_channel" valid:"channel,true"` JoinServerMsgs []string `json:"join_server_msgs" schema:"join_server_msgs" valid:"template,5000"` JoinDMEnabled bool `json:"join_dm_enabled" schema:"join_dm_enabled"` JoinDMMsg string `json:"join_dm_msg" schema:"join_dm_msg" valid:"template,5000"` LeaveEnabled bool `json:"leave_enabled" schema:"leave_enabled"` LeaveChannel int64 `json:"leave_channel" schema:"leave_channel" valid:"channel,true"` LeaveMsgs []string `json:"leave_msgs" schema:"leave_msgs" valid:"template,5000"` TopicEnabled bool `json:"topic_enabled" schema:"topic_enabled"` TopicChannel int64 `json:"topic_channel" schema:"topic_channel" valid:"channel,true"` CensorInvites bool `schema:"censor_invites"` }
func BotCachedGetConfig ¶ added in v2.41.0
func FetchConfig ¶ added in v2.41.0
func (*Config) ToModel ¶ added in v2.40.0
func (c *Config) ToModel() *models.GeneralNotificationConfig
type Plugin ¶
type Plugin struct{}
func (*Plugin) LoadServerHomeWidget ¶
func (p *Plugin) LoadServerHomeWidget(w http.ResponseWriter, r *http.Request) (web.TemplateData, error)
func (*Plugin) PluginInfo ¶
func (p *Plugin) PluginInfo() *common.PluginInfo
Source Files ¶
Click to show internal directories.
Click to hide internal directories.