Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
113fcbf2d1 | |||
dd20b73b76 | |||
5f72f58c74 |
@ -29,10 +29,6 @@ type Payload func(msg Message) (string, error)
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"code.jakeyoungdev.com/jake/bolt"
|
||||
@ -42,7 +38,7 @@ import (
|
||||
func main() {
|
||||
//bolt defaults the command indicator to '.' however that can be changed with the options
|
||||
//Example: bolt.New(bolt.WithIndicator('!')) would support commands like !ping
|
||||
b := bolt.New()
|
||||
b := bolt.New(bolt.WithLogLevel(bolt.LogLevelCmd))
|
||||
|
||||
b.AddCommands(
|
||||
// .ping can be run at any time by anyone and will respond with 'pong'
|
||||
|
22
bolt.go
22
bolt.go
@ -28,6 +28,7 @@ type bolt struct {
|
||||
*dg.Session //holds discordgo internals
|
||||
commands map[string]Command //maps trigger phrase to command struct for fast lookup
|
||||
indicator string //the indicator used to detect whether a message is a command
|
||||
logLvl LogLevel //determines how much the bot logs
|
||||
}
|
||||
|
||||
type Bolt interface {
|
||||
@ -63,13 +64,14 @@ func New(opts ...Option) Bolt {
|
||||
b := &bolt{
|
||||
Session: bot,
|
||||
commands: make(map[string]Command, 0),
|
||||
logLvl: LogLevelAll,
|
||||
}
|
||||
//set default command indicator
|
||||
b.indicator = "."
|
||||
|
||||
//apply options to bolt
|
||||
for _, o := range opts {
|
||||
o(b)
|
||||
for _, opt := range opts {
|
||||
opt(b)
|
||||
}
|
||||
|
||||
return b
|
||||
@ -130,11 +132,17 @@ func (b *bolt) messageHandler(s *dg.Session, msg *dg.MessageCreate) {
|
||||
msg.Content = "GIF/IMAGE"
|
||||
}
|
||||
|
||||
//log message
|
||||
log.Printf("< %s | %s | %s > %s\n", server.Name, channel.Name, msg.Author.Username, msg.Content)
|
||||
if b.logLvl == LogLevelAll {
|
||||
//log message
|
||||
log.Printf("< %s | %s | %s > %s\n", server.Name, channel.Name, msg.Author.Username, msg.Content)
|
||||
}
|
||||
|
||||
//the bot will ignore it's own messages to prevent command loops
|
||||
if msg.Author.ID == s.State.User.ID {
|
||||
if b.logLvl == LogLevelCmd {
|
||||
//log commands
|
||||
log.Printf("< %s | %s | %s > %s\n", server.Name, channel.Name, msg.Author.Username, msg.Content)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -151,6 +159,11 @@ func (b *bolt) messageHandler(s *dg.Session, msg *dg.MessageCreate) {
|
||||
|
||||
// parses command from message and handles timeout checks, role checks, and command execution. All command responses are sent back to Discord
|
||||
func (b *bolt) handleCommand(msg *dg.MessageCreate, s *dg.Session, server *dg.Guild, channel *dg.Channel, lg int) error {
|
||||
if b.logLvl == LogLevelCmd {
|
||||
//log commands
|
||||
log.Printf("< %s | %s | %s > %s\n", server.Name, channel.Name, msg.Author.Username, msg.Content)
|
||||
}
|
||||
|
||||
words := strings.Split(msg.Content, " ")
|
||||
run, ok := b.commands[words[0][lg:]]
|
||||
if !ok {
|
||||
@ -180,6 +193,7 @@ func (b *bolt) handleCommand(msg *dg.MessageCreate, s *dg.Session, server *dg.Gu
|
||||
//run command payload
|
||||
res, err := run.Payload(Message{
|
||||
Author: msg.Author.Username,
|
||||
ID: msg.Author.ID,
|
||||
Words: words,
|
||||
Content: msg.Content,
|
||||
Channel: channel.Name,
|
||||
|
@ -17,6 +17,7 @@ type Payload func(msg Message) (string, error)
|
||||
// message information passed to payload function
|
||||
type Message struct {
|
||||
Author string //username of message author
|
||||
ID string //discord ID of message author
|
||||
Words []string //words from message split on whitespace
|
||||
Content string //entire message content
|
||||
Channel string //message channel
|
||||
|
15
option.go
15
option.go
@ -2,9 +2,24 @@ package bolt
|
||||
|
||||
type Option func(b *bolt)
|
||||
|
||||
type LogLevel int
|
||||
|
||||
const (
|
||||
LogLevelAll LogLevel = iota //logs all messages, and errors
|
||||
LogLevelCmd LogLevel = iota //log only commands and responses, and errors
|
||||
LogLevelErr LogLevel = iota //logs only errors
|
||||
)
|
||||
|
||||
// sets the substring that must be present at the beginning of the message to indicate a command
|
||||
func WithIndicator(i string) Option {
|
||||
return func(b *bolt) {
|
||||
b.indicator = i
|
||||
}
|
||||
}
|
||||
|
||||
// sets the log level to determine how much bolt logs
|
||||
func WithLogLevel(lvl LogLevel) Option {
|
||||
return func(b *bolt) {
|
||||
b.logLvl = lvl
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user