package mux
import (
"github.com/bwmarrin/discordgo"
"time"
"strings"
)
func min(a, b int) int {
if a <= b {
return a
}
return b
}
// Chan for communicating to Glenda
var GlendaChan chan string
// Chan for communicating to Mux
var MuxChan chan string
// Chan for communicating with Dump
var dumpChan chan string
// Stores the time that the bot started this boot
var StartTime time.Time
// Multiplex internal channels, initialized once
func CommMux() {
MuxChan = make(chan string, 5)
GlendaChan = make(chan string, 5)
dumpChan = make(chan string)
// Listen for signals till death do us part
for {
select {
default:
}
time.Sleep(500 * time.Millisecond)
}
}
// Dump configs to file
func dump() string {
resp := ""
err := Config.Write()
if err != nil {
resp += "Dump config failed. Check logs.\n"
} else {
resp += "Ok."
}
resp += "\n"
return resp
}
// Return the current uptime
func (m *Mux) Uptime(ds *discordgo.Session, dm *discordgo.Message, ctx *Context) {
resp := ""
resp += time.Now().Sub(StartTime).String()
ds.ChannelMessageSend(dm.ChannelID, resp)
return
}
// Check authorization as owner
func authorized(dm *discordgo.Message) bool {
user := dm.Author
id := user.ID
if id == Config.Db["owner"] {
return true
}
return false
}
// Dump config to file
func (m *Mux) Dump(ds *discordgo.Session, dm *discordgo.Message, ctx *Context) {
if !authorized(dm) {
ds.ChannelMessageSend(dm.ChannelID, "Only the bot owner can do that.")
return
}
resp := dump()
ds.ChannelMessageSend(dm.ChannelID, resp)
return
}
// Rewrite griddisk paths as links
// Given /n/griddisk/foo, /foo, foo ⇒ …/incoming/foo
func (m *Mux) GridLink(ds *discordgo.Session, dm *discordgo.Message, ctx *Context) {
resp := ""
base := "http://wiki.9gridchan.org/incoming"
root := "/n/griddisk"
resp += base
path := ctx.Fields[1]
switch {
case strings.HasPrefix(path, root):
// Full path
sub := strings.TrimPrefix(path, root)
resp += sub
case path[0] == '/':
// Root only
resp += path
default:
// Any other case
resp += "/" + path
}
resp += "\n"
ds.ChannelMessageSend(dm.ChannelID, resp)
return
}
// Beer, dude.
func (m *Mux) Beer(ds *discordgo.Session, dm *discordgo.Message, ctx *Context) {
resp := ""
resp += ":beer:"
resp += "\n"
ds.ChannelMessageSend(dm.ChannelID, resp)
return
}
// Whiskey, dude.
func (m *Mux) Whiskey(ds *discordgo.Session, dm *discordgo.Message, ctx *Context) {
resp := ""
resp += ":tumbler_glass:"
resp += "\n"
ds.ChannelMessageSend(dm.ChannelID, resp)
return
}
// Wine, dude.
func (m *Mux) Wine(ds *discordgo.Session, dm *discordgo.Message, ctx *Context) {
resp := ""
resp += ":wine_glass:"
resp += "\n"
ds.ChannelMessageSend(dm.ChannelID, resp)
return
}