Add option for autojoining threads when opened

This commit is contained in:
Tulir Asokan
2022-10-28 23:35:31 +03:00
parent 6be531685f
commit f268ddd132
13 changed files with 219 additions and 70 deletions

View File

@@ -10,8 +10,9 @@ import (
)
const (
UserPortalTypeDM = "dm"
UserPortalTypeGuild = "guild"
UserPortalTypeDM = "dm"
UserPortalTypeGuild = "guild"
UserPortalTypeThread = "thread"
)
type UserPortal struct {
@@ -62,6 +63,16 @@ func (u *User) IsInSpace(discordID string) (isIn bool) {
return
}
func (u *User) IsInPortal(discordID string) (isIn bool) {
query := `SELECT EXISTS(SELECT 1 FROM user_portal WHERE user_mxid=$1 AND discord_id=$2)`
err := u.db.QueryRow(query, u.MXID, discordID).Scan(&isIn)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
u.log.Warnfln("Failed to scan in_space for %s/%s: %v", u.MXID, discordID, err)
panic(err)
}
return
}
func (u *User) MarkInPortal(portal UserPortal) {
query := `
INSERT INTO user_portal (discord_id, type, user_mxid, timestamp, in_space)
@@ -88,8 +99,8 @@ func (u *User) MarkNotInPortal(discordID string) {
func (u *User) PrunePortalList(beforeTS time.Time) []UserPortal {
query := `
DELETE FROM user_portal
WHERE user_mxid=$1 AND timestamp<$2
RETURNING discord_id, type, timestamp, in_space
WHERE user_mxid=$1 AND timestamp<$2 AND type IN ('dm', 'guild')
RETURNING discord_id, type, timestamp, in_space
`
rows, err := u.db.Query(query, u.MXID, beforeTS.UnixMilli())
if err != nil {