1
0
Files
gogodiscordo/core/messages.go

120 lines
3.1 KiB
Go

package core
import (
"bytes"
"fmt"
"os/exec"
"math/rand"
"sort"
"strings"
"time"
"github.com/bwmarrin/discordgo"
)
func getAudioMessage(msg string) (filename string, file *bytes.Reader) {
curr_time := time.Now().Unix()
filename = fmt.Sprintf("/tmp/%d.mp3", curr_time)
var cmd_args string = fmt.Sprintf("espeak-ng -s 120 -v mb-fr2 -p 30 '%s' --stdout",
maxString(msg, 300))
cmd := exec.Command("sh", "-c", cmd_args)
out, err := cmd.CombinedOutput()
if err != nil {
fmt.Println(fmt.Sprint(err))
}
file = bytes.NewReader(out)
return
}
func getHelpMessage() string {
// build list of possible commands
// TODO: currently, the help needs to get value initiated at startup time to be built.
// I don't like that and wish to test what is rendered without connecting to the server
var help []string
for _, command := range CommandRegister {
help = append(help,
fmt.Sprintf(
"%s : %s (Example : %s)\n",
command.name,
command.desc,
command.example))
}
sort.Strings(help)
welcome := fmt.Sprintf(
"Hello, I'm **%s**. Here are the things I can do :\n",
ConfigRegister.Name)
return welcome + strings.Join(help, "")
}
func getHatMessage() string {
hat := []string{"🧢", "👒", "⛑", "🎩", "🎓"}
rand.Seed(time.Now().UnixNano())
var amount int = (rand.Intn(len(hat) -1) +1)
var bag []string
for i := 0; i < amount; i++ {
rand.Seed(time.Now().UnixNano())
bag = append(bag, hat[(rand.Intn(len(hat) -1) +1)])
}
return strings.Join(bag, " ")
}
func getTalkbackMessage(message string) string {
for _, t := range ConfigRegister.Talkback {
for _, p := range t.Domain.Patterns {
rand.Seed(time.Now().UnixNano())
if strings.Contains(strings.ToLower(message), strings.ToLower(p)) &&
rand.Intn(2) == 1 {
rand.Seed(time.Now().UnixNano())
return t.Domain.Answers[rand.Intn(len(t.Domain.Answers))]
}
}
}
return ""
}
func MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
for alias, _ := range CommandRegister {
if strings.HasPrefix(m.Content, alias) {
if m.Author.ID == s.State.User.ID {
return
}
var message string = strings.TrimPrefix(m.Content, alias)
CommandRegister[alias].command(s, m, message)
}
}
}
func MessageHat(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
s.ChannelMessageSend(m.ChannelID, getHatMessage())
}
func MessageTalkback(s *discordgo.Session, m *discordgo.MessageCreate) {
if m.Author.ID == s.State.User.ID {
return
}
var answer string = getTalkbackMessage(m.Content)
if answer != "" {
s.ChannelMessageSend(m.ChannelID, answer)
}
}
func MessageHelp(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
s.ChannelMessageSend(m.ChannelID, getHelpMessage())
}
func MessagePing(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
if m.Content == "ping" {
s.ChannelMessageSend(m.ChannelID, "Pong!")
}
if m.Content == "pong" {
s.ChannelMessageSend(m.ChannelID, "Ping!")
}
}
func MessageAudio(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
var cleanMessage string = prepareTTSMessage(message)
filename, file := getAudioMessage(cleanMessage)
s.ChannelFileSend(m.ChannelID, filename, file)
}