"talkback" function (random answers based on a set of patterns)
This commit is contained in:
@ -1,2 +1,2 @@
|
|||||||
token: "some_really_long_string"
|
token: "some_really_long_string"
|
||||||
name: "gogodiscordo"
|
name: "Gogodiscordo"
|
||||||
|
|||||||
@ -11,6 +11,13 @@ import (
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
Token string `yaml:"token"`
|
Token string `yaml:"token"`
|
||||||
Name string `yaml:"name"`
|
Name string `yaml:"name"`
|
||||||
|
Talkback[] struct {
|
||||||
|
Domain struct {
|
||||||
|
Name string `yaml:"name"`
|
||||||
|
Patterns []string `yaml:"patterns"`
|
||||||
|
Answers []string `yaml:"answers"`
|
||||||
|
} `yaml:"domain"`
|
||||||
|
} `yaml:"talkback"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Command struct {
|
type Command struct {
|
||||||
|
|||||||
@ -4,6 +4,8 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"math/rand"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -26,9 +28,9 @@ func createAudio(msg string) (filename string, file *bytes.Reader) {
|
|||||||
|
|
||||||
func createHelpMessage() string {
|
func createHelpMessage() string {
|
||||||
// build list of possible commands
|
// 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
|
var help []string
|
||||||
help = append(help,
|
|
||||||
fmt.Sprintf("Hello, I'm **%s**. Here are the things I can do :\n", ConfigRegister.Name))
|
|
||||||
for _, command := range CommandRegister {
|
for _, command := range CommandRegister {
|
||||||
help = append(help,
|
help = append(help,
|
||||||
fmt.Sprintf(
|
fmt.Sprintf(
|
||||||
@ -37,7 +39,11 @@ func createHelpMessage() string {
|
|||||||
command.desc,
|
command.desc,
|
||||||
command.example))
|
command.example))
|
||||||
}
|
}
|
||||||
return strings.Join(help, "")
|
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 MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
|
func MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
@ -47,12 +53,28 @@ func MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
var message string = strings.TrimPrefix(m.Content, alias)
|
var message string = strings.TrimPrefix(m.Content, alias)
|
||||||
fmt.Println(message)
|
|
||||||
CommandRegister[alias].command(s, m, message)
|
CommandRegister[alias].command(s, m, message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MessageTalkback(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
|
if m.Author.ID == s.State.User.ID {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, t := range ConfigRegister.Talkback {
|
||||||
|
for _, p := range t.Domain.Patterns {
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
if strings.Contains(strings.ToLower(m.Content), strings.ToLower(p)) &&
|
||||||
|
rand.Intn(2) == 1 {
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
answer := t.Domain.Answers[rand.Intn(len(t.Domain.Answers))]
|
||||||
|
s.ChannelMessageSend(m.ChannelID, answer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func MessageHelp(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
|
func MessageHelp(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
|
||||||
s.ChannelMessageSend(m.ChannelID, createHelpMessage())
|
s.ChannelMessageSend(m.ChannelID, createHelpMessage())
|
||||||
}
|
}
|
||||||
|
|||||||
9
main.go
9
main.go
@ -3,7 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"ariona.fr/git/gator/gogodiscordo/core"
|
"ariona.fr/git/gator/gogodiscordo/core"
|
||||||
|
|
||||||
"fmt"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
@ -15,7 +15,7 @@ func main() {
|
|||||||
core.ConfigRegister.LoadConf()
|
core.ConfigRegister.LoadConf()
|
||||||
discord, err := discordgo.New("Bot " + core.ConfigRegister.Token)
|
discord, err := discordgo.New("Bot " + core.ConfigRegister.Token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("error creating Discord session, ", err)
|
log.Println("error creating Discord session, ", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,15 +36,16 @@ func main() {
|
|||||||
core.MessageHelp)
|
core.MessageHelp)
|
||||||
|
|
||||||
discord.AddHandler(core.MessageHandler)
|
discord.AddHandler(core.MessageHandler)
|
||||||
|
discord.AddHandler(core.MessageTalkback)
|
||||||
|
|
||||||
err = discord.Open()
|
err = discord.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("error opening connection, ", err)
|
log.Println("error opening connection, ", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait here until CTRL-C or other term signal is received.
|
// Wait here until CTRL-C or other term signal is received.
|
||||||
fmt.Println("Bot is now running. Press CTRL-C to exit.")
|
log.Println("Bot is now running. Press CTRL-C to exit.")
|
||||||
sc := make(chan os.Signal, 1)
|
sc := make(chan os.Signal, 1)
|
||||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
|
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
|
||||||
<-sc
|
<-sc
|
||||||
|
|||||||
Reference in New Issue
Block a user