A ton of work getting towards dms.
This commit also points to my fork of discordgo which makes it look like the official client which is the only way to get the actually contents of a dm when not authorized as a bot.
This commit is contained in:
@@ -1,20 +1,22 @@
|
||||
CREATE TABLE IF NOT EXISTS portal (
|
||||
id TEXT,
|
||||
receiver TEXT,
|
||||
mxid TEXT UNIQUE,
|
||||
CREATE TABLE portal (
|
||||
id TEXT,
|
||||
channel_id TEXT,
|
||||
mxid TEXT UNIQUE,
|
||||
|
||||
name TEXT NOT NULL,
|
||||
topic TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
topic TEXT NOT NULL,
|
||||
|
||||
avatar TEXT NOT NULL,
|
||||
avatar_url TEXT NOT NULL,
|
||||
avatar_url TEXT,
|
||||
|
||||
PRIMARY KEY (id, receiver)
|
||||
first_event_id TEXT,
|
||||
|
||||
PRIMARY KEY (id, channel_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS puppet (
|
||||
id TEXT PRIMARY KEY,
|
||||
displayname TEXT,
|
||||
CREATE TABLE puppet (
|
||||
id TEXT PRIMARY KEY,
|
||||
display_name TEXT,
|
||||
|
||||
avatar TEXT,
|
||||
avatar_url TEXT,
|
||||
@@ -22,7 +24,7 @@ CREATE TABLE IF NOT EXISTS puppet (
|
||||
enable_presence BOOLEAN NOT NULL DEFAULT true
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user (
|
||||
CREATE TABLE user (
|
||||
mxid TEXT PRIMARY KEY,
|
||||
id TEXT UNIQUE,
|
||||
|
||||
@@ -30,3 +32,21 @@ CREATE TABLE IF NOT EXISTS user (
|
||||
|
||||
token TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE mx_user_profile (
|
||||
room_id TEXT,
|
||||
user_id TEXT,
|
||||
membership TEXT NOT NULL,
|
||||
displayname TEXT,
|
||||
avatar_url TEXT,
|
||||
PRIMARY KEY (room_id, user_id)
|
||||
);
|
||||
|
||||
CREATE TABLE mx_registrations (
|
||||
user_id TEXT PRIMARY KEY
|
||||
);
|
||||
|
||||
CREATE TABLE mx_room_state (
|
||||
room_id TEXT PRIMARY KEY,
|
||||
power_levels TEXT
|
||||
);
|
||||
|
||||
@@ -19,12 +19,14 @@ type Portal struct {
|
||||
|
||||
Avatar string
|
||||
AvatarURL id.ContentURI
|
||||
|
||||
FirstEventID id.EventID
|
||||
}
|
||||
|
||||
func (p *Portal) Scan(row Scannable) *Portal {
|
||||
var mxid, avatarURL sql.NullString
|
||||
var mxid, avatarURL, firstEventID sql.NullString
|
||||
|
||||
err := row.Scan(&p.Key.ID, &p.Key.Receiver, &mxid, &p.Name, &p.Topic, &p.Avatar, &avatarURL)
|
||||
err := row.Scan(&p.Key.ID, &p.Key.ChannelID, &mxid, &p.Name, &p.Topic, &p.Avatar, &avatarURL, &firstEventID)
|
||||
if err != nil {
|
||||
if err != sql.ErrNoRows {
|
||||
p.log.Errorln("Database scan failed:", err)
|
||||
@@ -35,19 +37,34 @@ func (p *Portal) Scan(row Scannable) *Portal {
|
||||
|
||||
p.MXID = id.RoomID(mxid.String)
|
||||
p.AvatarURL, _ = id.ParseContentURI(avatarURL.String)
|
||||
p.FirstEventID = id.EventID(firstEventID.String)
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *Portal) Insert() {
|
||||
query := "INSERT INTO portal" +
|
||||
" (id, receiver, mxid, name, topic, avatar, avatar_url)" +
|
||||
" VALUES ($1, $2, $3, $4, $5, $6, $7)"
|
||||
" (id, mxid, channel_id, name, topic, avatar, avatar_url, first_event_id)" +
|
||||
" VALUES ($1, $2, $3, $4, $5, $6, $7, $8)"
|
||||
|
||||
_, err := p.db.Exec(query, p.Key.ID, p.Key.Receiver, p.MXID,
|
||||
p.Name, p.Topic, p.Avatar, p.AvatarURL.String())
|
||||
_, err := p.db.Exec(query, p.Key.ID, p.MXID, p.Key.ChannelID,
|
||||
p.Name, p.Topic, p.Avatar, p.AvatarURL.String(), p.FirstEventID.String())
|
||||
|
||||
if err != nil {
|
||||
p.log.Warnfln("Failed to insert %s: %v", p.Key, err)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Portal) Update() {
|
||||
query := "UPDATE portal SET" +
|
||||
" mxid=$1, name=$2, topic=$3, avatar=$4, avatar_url=$5, first_event_id=$6" +
|
||||
" WHERE id=$7 AND channel_id=$8"
|
||||
|
||||
_, err := p.db.Exec(query, p.MXID, p.Name, p.Topic, p.Avatar,
|
||||
p.AvatarURL.String(), p.FirstEventID.String(), p.Key.ID,
|
||||
p.Key.ChannelID)
|
||||
|
||||
if err != nil {
|
||||
p.log.Warnfln("Failed to update %s: %v", p.Key, err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
package database
|
||||
|
||||
type PortalKey struct {
|
||||
ID string
|
||||
Receiver string
|
||||
ID string
|
||||
ChannelID string
|
||||
}
|
||||
|
||||
func NewPortalKey(id, channelID string) PortalKey {
|
||||
return PortalKey{
|
||||
ID: id,
|
||||
ChannelID: channelID,
|
||||
}
|
||||
}
|
||||
|
||||
func (key PortalKey) String() string {
|
||||
if key.Receiver == key.ID {
|
||||
if key.ChannelID == key.ID {
|
||||
return key.ID
|
||||
}
|
||||
return key.ID + "-" + key.Receiver
|
||||
return key.ID + "-" + key.ChannelID
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ func (pq *PortalQuery) GetAll() []*Portal {
|
||||
return pq.getAll("SELECT * FROM portal")
|
||||
}
|
||||
|
||||
func (pq *PortalQuery) GetByDID(key PortalKey) *Portal {
|
||||
return pq.get("SELECT * FROM portal WHERE did=$1 AND receiver=$2", key.ID, key.Receiver)
|
||||
func (pq *PortalQuery) GetByID(key PortalKey) *Portal {
|
||||
return pq.get("SELECT * FROM portal WHERE id=$1 AND channel_id=$2", key.ID, key.ChannelID)
|
||||
}
|
||||
|
||||
func (pq *PortalQuery) GetByMXID(mxid id.RoomID) *Portal {
|
||||
@@ -30,7 +30,7 @@ func (pq *PortalQuery) GetByMXID(mxid id.RoomID) *Portal {
|
||||
}
|
||||
|
||||
func (pq *PortalQuery) GetAllByDID(did string) []*Portal {
|
||||
return pq.getAll("SELECT * FROM portal WHERE did=$1", did)
|
||||
return pq.getAll("SELECT * FROM portal WHERE id=$1", did)
|
||||
}
|
||||
|
||||
func (pq *PortalQuery) getAll(query string, args ...interface{}) []*Portal {
|
||||
|
||||
@@ -54,3 +54,16 @@ func (p *Puppet) Insert() {
|
||||
p.log.Warnfln("Failed to insert %s: %v", p.ID, err)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Puppet) Update() {
|
||||
query := "UPDATE puppet" +
|
||||
" SET display_name=$1, avatar=$2, avatar_url=$3, enable_presence=$4" +
|
||||
" WHERE id=$5"
|
||||
|
||||
_, err := p.db.Exec(query, p.DisplayName, p.Avatar, p.AvatarURL.String(),
|
||||
p.EnablePresence, p.ID)
|
||||
|
||||
if err != nil {
|
||||
p.log.Warnfln("Failed to update %s: %v", p.ID, err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ func (pq *PuppetQuery) New() *Puppet {
|
||||
}
|
||||
|
||||
func (pq *PuppetQuery) Get(id string) *Puppet {
|
||||
row := pq.db.QueryRow("SELECT id, displayname, avatar, avatar_url, enable_presence FROM puppet WHERE id=$1", id)
|
||||
row := pq.db.QueryRow("SELECT id, display_name, avatar, avatar_url, enable_presence FROM puppet WHERE id=$1", id)
|
||||
if row == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user