Documentation ¶
Index ¶
- Constants
- Variables
- func AddCount() uint64
- func GenerateToken() string
- func GetCount() uint64
- func IsOurProblem(e error) bool
- type Category
- type Db
- func (db *Db) AddAdmin(id string) (err error)
- func (db *Db) AddCategory(name string) (id int, err error)
- func (db *Db) AddExplanation(e *Explanation) (ex *Explanation, err error)
- func (db *Db) AddPronoun(p PronounSet) (id int, err error)
- func (db *Db) AddTerm(t *Term) (*Term, error)
- func (db *Db) AddToBlacklist(guildID string, channelIDs []string) (err error)
- func (db *Db) CaptureError(ctx *bcr.Context, e error) *sentry.EventID
- func (db *Db) CategoryFromID(id int) (c *Category)
- func (db *Db) CategoryID(s string) (id int, err error)
- func (db *Db) CreateServerIfNotExists(guildID string) (exists bool, err error)
- func (db *Db) CtxInBlacklist(ctx *bcr.Context) bool
- func (db *Db) DeleteServer(guildID string) (err error)
- func (db *Db) Error(id string) (e *Error, err error)
- func (db *Db) GetAdmins() (admins []string, err error)
- func (db *Db) GetAllExplanations() (e []*Explanation, err error)
- func (db *Db) GetBlacklist(guildID string) (b []string, err error)
- func (db *Db) GetCategories() (c []*Category, err error)
- func (db *Db) GetCategoryTerms(id int, mask TermFlag) (terms []*Term, err error)
- func (db *Db) GetCmdExplanations() (e []*Explanation, err error)
- func (db *Db) GetExplanation(s string) (e *Explanation, err error)
- func (db *Db) GetOrCreateToken(userID string) (token string, err error)
- func (db *Db) GetPronoun(forms ...string) (sets []*PronounSet, err error)
- func (db *Db) GetTerm(id int) (t *Term, err error)
- func (db *Db) GetTerms(mask TermFlag) (terms []*Term, err error)
- func (db *Db) InternalError(ctx *bcr.Context, e error) error
- func (db *Db) IsBlacklisted(guildID, channelID string) (b bool)
- func (db *Db) Pronouns() (p []*PronounSet, err error)
- func (db *Db) RandomTerm() (t *Term, err error)
- func (db *Db) RandomTermCategory(id int) (t *Term, err error)
- func (db *Db) RemoveFromBlacklist(guildID, channelID string) (err error)
- func (db *Db) RemoveTerm(id int) (err error)
- func (db *Db) ResetToken(userID string) (token string, err error)
- func (db *Db) Search(input string, limit int) (terms []*Term, err error)
- func (db *Db) SearchCat(input string, cat, limit int, showHidden bool) (terms []*Term, err error)
- func (db *Db) SetAsCommand(id int, b bool) (err error)
- func (db *Db) SetCW(id int, text string) (err error)
- func (db *Db) SetFlags(id int, flags TermFlag) (err error)
- func (db *Db) SetNote(id int, note string) (err error)
- func (db *Db) SetSentry(hub *sentry.Hub)
- func (db *Db) TagTerms(tag string) (t []*Term, err error)
- func (db *Db) Tags() (s []string, err error)
- func (db *Db) TermCount() (count int)
- func (db *Db) TermsSince(d time.Time) (t []*Term, err error)
- func (db *Db) UntaggedTerms() (t []*Term, err error)
- func (db *Db) UpdateAliases(id int, aliases []string) (err error)
- func (db *Db) UpdateDesc(id int, desc string) (err error)
- func (db *Db) UpdateImage(id int, img string) (err error)
- func (db *Db) UpdateSource(id int, source string) (err error)
- func (db *Db) UpdateTags(id int, tags []string) (err error)
- func (db *Db) UpdateTitle(id int, title string) (err error)
- func (db *Db) ValidateToken(token string) (t bool)
- type Error
- type Explanation
- type PronounSet
- type Term
- type TermFlag
Constants ¶
const DBVersion = 14
DBVersion is the current database version
const EmbedColour = 0xd14171
EmbedColour is the embed colour used throughout the bot
Variables ¶
var ( ErrorAlreadyBlacklisted = errors.New("channel is already blacklisted") ErrorNotBlacklisted = errors.New("channel is not blacklisted") )
Errors for setting the blacklist
var ( ErrMoreThanOneRow = errors.New("more than one row returned") ErrTooManyForms = errors.New("too many forms given") ErrNoForms = errors.New("no forms given") )
Errors ...
var ( ErrInvalidToken = errors.New("invalid token") ErrTokenExpired = errors.New("token has expired") )
Errors regarding tokens
var DBVersions []string = []string{
`alter table public.terms add column flags integer not null default 0;
update public.info set schema_version = 2;`,
`alter table public.terms drop column searchtext;
alter table public.terms add column searchtext tsvector generated always as (
setweight(to_tsvector('english', "name"), 'A') ||
setweight(to_tsvector('english', "description"), 'B') ||
setweight(to_tsvector('english', "source"), 'C') ||
setweight(array_to_tsvector("aliases"), 'A')
) stored;
update public.info set schema_version = 3;`,
`alter table public.terms add column content_warnings text not null default '';
update public.info set schema_version = 4;`,
`create index term_names_alphabetical on public.terms (name, id);
update public.info set schema_version = 5;`,
`alter table public.terms add column last_modified timestamp;
update public.terms set last_modified = created where last_modified is null;
alter table public.terms alter column last_modified set default (current_timestamp at time zone 'utc');
alter table public.terms alter column last_modified set not null;
update public.info set schema_version = 6;`,
`create table if not exists admin_tokens (
user_id text primary key,
token text not null,
expires timestamp not null default (now() + interval '30 days')::timestamp
);
update public.info set schema_version = 7;`,
`alter table public.terms add column note text not null default '';
update public.info set schema_version = 8;`,
`alter table public.explanations add column as_command boolean not null default false;
update public.info set schema_version = 9;`,
`alter table public.terms add column aliases_string text not null default '';
alter table public.terms drop column searchtext;
alter table public.terms add column searchtext tsvector generated always as (
setweight(to_tsvector('english', "name"), 'A') ||
setweight(to_tsvector('english', "description"), 'B') ||
setweight(to_tsvector('english', "source"), 'C') ||
setweight(to_tsvector('english', "aliases_string"), 'A')
) stored;
update public.terms set aliases_string = array_to_string(aliases, ', ');
update public.info set schema_version = 10;`,
`create table if not exists errors (
id uuid primary key,
command text not null,
user_id bigint not null,
channel bigint not null,
error text not null,
time timestamp not null default (current_timestamp at time zone 'utc')
);
update public.info set schema_version = 11;`,
`alter table public.terms add column image_url text not null default '';
update public.info set schema_version = 12;`,
`create table if not exists pronouns (
id serial primary key,
subjective text not null default '',
objective text not null default '',
poss_det text not null default '',
poss_pro text not null default '',
reflexive text not null default '',
unique (subjective, objective, poss_det, poss_pro, reflexive)
);
update public.info set schema_version = 13;`,
`alter table public.terms add column tags text[] not null default array[]::text[];
update public.info set schema_version = 14;`,
}
DBVersions is a slice of schemas for every database version
var (
ErrorNoRowsAffected = errors.New("no rows affected")
)
Errors related to database operations
Functions ¶
func IsOurProblem ¶
IsOurProblem checks if an error is "our problem", as in, should be in the logs and reported to Sentry. Will be expanded eventually once we get more insight into what type of errors we get.
Types ¶
type Db ¶
type Db struct { Pool *pgxpool.Pool Sugar *zap.SugaredLogger GuildCache *ttlcache.Cache Config *structs.BotConfig // contains filtered or unexported fields }
Db ...
func (*Db) AddExplanation ¶
func (db *Db) AddExplanation(e *Explanation) (ex *Explanation, err error)
AddExplanation adds an explanation to the database
func (*Db) AddPronoun ¶
func (db *Db) AddPronoun(p PronounSet) (id int, err error)
AddPronoun adds a pronoun set, returning the ID
func (*Db) AddToBlacklist ¶
AddToBlacklist adds the given channelID to the blacklist for guildID
func (*Db) CaptureError ¶
CaptureError captures an error with additional context
func (*Db) CategoryID ¶
CategoryID gets the ID from a category name
func (*Db) CreateServerIfNotExists ¶
CreateServerIfNotExists returns true if the server exists
func (*Db) CtxInBlacklist ¶
CtxInBlacklist is a wrapper around IsBlacklisted for bcr
func (*Db) DeleteServer ¶
DeleteServer deletes a server's database entry
func (*Db) GetAllExplanations ¶
func (db *Db) GetAllExplanations() (e []*Explanation, err error)
GetAllExplanations ...
func (*Db) GetBlacklist ¶
GetBlacklist returns the channel blacklist for guildID
func (*Db) GetCategories ¶
GetCategories ...
func (*Db) GetCategoryTerms ¶
GetCategoryTerms gets terms by category
func (*Db) GetCmdExplanations ¶
func (db *Db) GetCmdExplanations() (e []*Explanation, err error)
GetCmdExplanations ...
func (*Db) GetExplanation ¶
func (db *Db) GetExplanation(s string) (e *Explanation, err error)
GetExplanation ...
func (*Db) GetOrCreateToken ¶
GetOrCreateToken gets or creates a token for the given user
func (*Db) GetPronoun ¶
func (db *Db) GetPronoun(forms ...string) (sets []*PronounSet, err error)
GetPronoun gets a pronoun from the database gods this function is shit but idc, if it works it works
func (*Db) InternalError ¶
InternalError sends an error message and logs the error to the database
func (*Db) IsBlacklisted ¶
IsBlacklisted returns true if a channel is blacklisted
func (*Db) RandomTerm ¶
RandomTerm gets a random term from the database
func (*Db) RandomTermCategory ¶
RandomTermCategory gets a random term from the database from the specified category
func (*Db) RemoveFromBlacklist ¶
RemoveFromBlacklist removes the given channelID from the blacklist for guildID
func (*Db) RemoveTerm ¶
RemoveTerm removes a term from the database
func (*Db) ResetToken ¶
ResetToken ...
func (*Db) TermsSince ¶
TermsSince returns all terms added since the specified date
func (*Db) UpdateAliases ¶
UpdateAliases updates the aliases for a term
func (*Db) UpdateDesc ¶
UpdateDesc updates the description for a term
func (*Db) UpdateImage ¶
UpdateImage updates the title for a term
func (*Db) UpdateSource ¶
UpdateSource updates the source for a term
func (*Db) UpdateTags ¶
UpdateTags updates the tags for a term
func (*Db) UpdateTitle ¶
UpdateTitle updates the title for a term
func (*Db) ValidateToken ¶
ValidateToken checks if a token is valid and not expired
type Error ¶
type Error struct { ID uuid.UUID Command string UserID discord.UserID Channel discord.ChannelID Error string Time time.Time }
Error ...
type Explanation ¶
type Explanation struct { ID int `json:"id"` Name string `json:"name"` Aliases []string `json:"aliases"` Description string `json:"description"` Created time.Time `json:"created"` AsCommand bool `json:"-"` }
Explanation is a single explanation
type PronounSet ¶
type PronounSet struct { ID int `json:"id"` Subjective string `json:"subjective"` Objective string `json:"objective"` PossDet string `json:"possessive_determiner"` PossPro string `json:"possessive_pronoun"` Reflexive string `json:"reflexive"` }
PronounSet is a single set of pronouns
func (PronounSet) String ¶
func (p PronounSet) String() string
type Term ¶
type Term struct { ID int `json:"id"` Category int `json:"category_id"` CategoryName string `json:"category"` Name string `json:"name"` Aliases []string `json:"aliases"` Description string `json:"description"` Note string `json:"note,omitempty"` Source string `json:"source"` Created time.Time `json:"created"` LastModified time.Time `json:"last_modified"` Tags []string `json:"tags,omitempty"` ContentWarnings string `json:"content_warnings,omitempty"` ImageURL string `json:"image_url,omitempty"` Flags TermFlag `json:"flags"` // Rank is only populated with db.Search() Rank float64 `json:"rank,omitempty"` // Headline is only populated with db.Search() Headline string `json:"headline,omitempty"` }
Term holds info on a single term
func (*Term) RandomHidden ¶
RandomHidden returns true if the term is hidden from the random command
func (*Term) SearchHidden ¶
SearchHidden returns true if the term is hidden from search results