dynamically generated help message
This commit is contained in:
@ -8,12 +8,22 @@ import (
|
|||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ConfigRegister struct {
|
type Config struct {
|
||||||
Token string `yaml:"token"`
|
Token string `yaml:"token"`
|
||||||
Name string `yaml:"name"`
|
Name string `yaml:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigRegister) LoadConf() *ConfigRegister {
|
type Command struct {
|
||||||
|
name string
|
||||||
|
desc string
|
||||||
|
example string
|
||||||
|
command func(
|
||||||
|
s *discordgo.Session,
|
||||||
|
m *discordgo.MessageCreate,
|
||||||
|
message string)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Config) LoadConf() *Config {
|
||||||
yamlFile, err := ioutil.ReadFile("config.yaml")
|
yamlFile, err := ioutil.ReadFile("config.yaml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("yamlFile.Get err #%v ", err)
|
log.Printf("yamlFile.Get err #%v ", err)
|
||||||
@ -26,19 +36,22 @@ func (c *ConfigRegister) LoadConf() *ConfigRegister {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var CommandRegister = make(
|
var CommandRegister = make(
|
||||||
map[string]func(
|
map[string]Command)
|
||||||
s *discordgo.Session,
|
|
||||||
m *discordgo.MessageCreate,
|
|
||||||
message string))
|
|
||||||
|
|
||||||
func SetCommand(aliases []string, command func(
|
func SetCommand(
|
||||||
s *discordgo.Session,
|
aliases []string,
|
||||||
m *discordgo.MessageCreate,
|
desc string,
|
||||||
message string)) {
|
example string,
|
||||||
|
command func(s *discordgo.Session, m *discordgo.MessageCreate, message string)) {
|
||||||
for _, alias := range aliases {
|
for _, alias := range aliases {
|
||||||
CommandRegister[alias] = command
|
c := Command{
|
||||||
log.Printf("added %s to Register", alias)
|
name: alias,
|
||||||
|
desc: desc,
|
||||||
|
example: example,
|
||||||
|
command: command}
|
||||||
|
CommandRegister[alias] = c
|
||||||
|
log.Printf("added %s to Register", alias)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var Config ConfigRegister
|
var ConfigRegister Config
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -24,23 +24,37 @@ func createAudio(msg string) (filename string, file *bytes.Reader) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createHelpMessage() string {
|
||||||
|
// build list of possible commands
|
||||||
|
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 {
|
||||||
|
help = append(help,
|
||||||
|
fmt.Sprintf(
|
||||||
|
"%s : %s (Example : %s)\n",
|
||||||
|
command.name,
|
||||||
|
command.desc,
|
||||||
|
command.example))
|
||||||
|
}
|
||||||
|
return strings.Join(help, "")
|
||||||
|
}
|
||||||
|
|
||||||
func MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
|
func MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
for alias, command := range CommandRegister {
|
for alias, _ := range CommandRegister {
|
||||||
if strings.HasPrefix(m.Content, alias) {
|
if strings.HasPrefix(m.Content, alias) {
|
||||||
if m.Author.ID == s.State.User.ID {
|
if m.Author.ID == s.State.User.ID {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var message string = strings.TrimPrefix(m.Content, alias)
|
var message string = strings.TrimPrefix(m.Content, alias)
|
||||||
fmt.Println(message)
|
fmt.Println(message)
|
||||||
command(s, m, message)
|
CommandRegister[alias].command(s, m, message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func MessageHelp(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
|
func MessageHelp(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
|
||||||
// build list of possible commands
|
s.ChannelMessageSend(m.ChannelID, createHelpMessage())
|
||||||
fmt.Println(message)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func MessagePing(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
|
func MessagePing(s *discordgo.Session, m *discordgo.MessageCreate, message string) {
|
||||||
|
|||||||
22
main.go
22
main.go
@ -12,16 +12,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
core.Config.LoadConf()
|
core.ConfigRegister.LoadConf()
|
||||||
discord, err := discordgo.New("Bot " + core.Config.Token)
|
discord, err := discordgo.New("Bot " + core.ConfigRegister.Token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("error creating Discord session, ", err)
|
fmt.Println("error creating Discord session, ", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
core.SetCommand([]string{"/ggd audio", "/gogodisco audio"}, core.MessageAudio)
|
core.SetCommand(
|
||||||
core.SetCommand([]string{"ping", "pong"}, core.MessagePing)
|
[]string{"/ggd audio", "/ggd tts"},
|
||||||
core.SetCommand([]string{"/ggd help", "/gogodisco help"}, core.MessageHelp)
|
"*Attach a TTS version of the message on the channel*",
|
||||||
|
"`/ggd [audio|tts] hello everyone`",
|
||||||
|
core.MessageAudio)
|
||||||
|
core.SetCommand(
|
||||||
|
[]string{"ping", "pong"},
|
||||||
|
"*Check if the bot is alive*",
|
||||||
|
"`[ping|pong]`",
|
||||||
|
core.MessagePing)
|
||||||
|
core.SetCommand(
|
||||||
|
[]string{"/ggd help", "/ggd info"},
|
||||||
|
"*Display the available list of commands*",
|
||||||
|
"`/ggd [help|info]`",
|
||||||
|
core.MessageHelp)
|
||||||
|
|
||||||
discord.AddHandler(core.MessageHandler)
|
discord.AddHandler(core.MessageHandler)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user