Compare commits
4 Commits
v0.4.7
...
new/db-con
| Author | SHA1 | Date | |
|---|---|---|---|
|
d09e3fce03
|
|||
| 7376e8f857 | |||
|
c196e25e0c
|
|||
|
d70dd8c3a4
|
@@ -44,6 +44,10 @@ The React method will react to the command message by adding the requested emoji
|
||||
func (m *Message) Respond(res string) error
|
||||
```
|
||||
The Respond method will send the value of <b>res</b> in response to the command message.
|
||||
```go
|
||||
func Delete() error
|
||||
```
|
||||
The Delete method will delete the message from the text channel
|
||||
|
||||
### Example
|
||||
```go
|
||||
|
||||
31
bolt.go
31
bolt.go
@@ -10,6 +10,7 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"code.jakeyoungdev.com/go/lite"
|
||||
dg "github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
@@ -22,19 +23,31 @@ const (
|
||||
dg.IntentMessageContent |
|
||||
dg.IntentsGuildMessages |
|
||||
dg.IntentGuildMessageReactions
|
||||
|
||||
DEFAULT_DB_NAME = "boltdb"
|
||||
DB_PATH = "/var/lib/bolt"
|
||||
)
|
||||
|
||||
type Data struct {
|
||||
//user, which user saved this
|
||||
//data, does this just go interface?
|
||||
//date saved?
|
||||
//expires?
|
||||
}
|
||||
|
||||
// basic bot structure containing discordgo connection as well as the command map
|
||||
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
|
||||
db lite.Database
|
||||
}
|
||||
|
||||
type Bolt interface {
|
||||
Start() error
|
||||
AddCommands(cmd ...Command)
|
||||
Database(file string) error
|
||||
//filtered methods
|
||||
stop() error
|
||||
messageHandler(s *dg.Session, msg *dg.MessageCreate)
|
||||
@@ -97,8 +110,26 @@ func (b *bolt) Start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *bolt) Database(file string) error {
|
||||
if file == "" {
|
||||
file = DEFAULT_DB_NAME
|
||||
}
|
||||
|
||||
db, err := lite.New(lite.WithFile(file), lite.WithPath(DB_PATH))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
b.db = db
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// stops the bot
|
||||
func (b *bolt) stop() error {
|
||||
if b.db != nil {
|
||||
b.db.Close()
|
||||
}
|
||||
return b.Close()
|
||||
}
|
||||
|
||||
|
||||
13
go.mod
13
go.mod
@@ -2,10 +2,17 @@ module code.jakeyoungdev.com/jake/bolt
|
||||
|
||||
go 1.24.0
|
||||
|
||||
require github.com/bwmarrin/discordgo v0.29.0
|
||||
require (
|
||||
code.jakeyoungdev.com/go/lite v0.3.0
|
||||
github.com/bwmarrin/discordgo v0.29.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/gorilla/websocket v1.4.2 // indirect
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
|
||||
github.com/jmoiron/sqlx v1.4.0 // indirect
|
||||
github.com/ncruces/go-sqlite3 v0.26.1 // indirect
|
||||
github.com/ncruces/julianday v1.0.0 // indirect
|
||||
github.com/tetratelabs/wazero v1.9.0 // indirect
|
||||
golang.org/x/crypto v0.39.0 // indirect
|
||||
golang.org/x/sys v0.33.0 // indirect
|
||||
)
|
||||
|
||||
26
go.sum
26
go.sum
@@ -1,12 +1,34 @@
|
||||
code.jakeyoungdev.com/go/lite v0.3.0 h1:QJuinHNtb3h+f0Cht1UNzOmUTT7YyaFYCaYAmCHAxMg=
|
||||
code.jakeyoungdev.com/go/lite v0.3.0/go.mod h1:NadLydJU2G+RsyokYjA/+EnwyNoMujswVwfZ1SQx1+E=
|
||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||
github.com/bwmarrin/discordgo v0.29.0 h1:FmWeXFaKUwrcL3Cx65c20bTRW+vOb6k8AnaP+EgjDno=
|
||||
github.com/bwmarrin/discordgo v0.29.0/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg=
|
||||
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
|
||||
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
||||
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||
github.com/ncruces/go-sqlite3 v0.26.1 h1:lBXmbmucH1Bsj57NUQR6T84UoMN7jnNImhF+ibEITJU=
|
||||
github.com/ncruces/go-sqlite3 v0.26.1/go.mod h1:XFTPtFIo1DmGCh+XVP8KGn9b/o2f+z0WZuT09x2N6eo=
|
||||
github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
|
||||
github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g=
|
||||
github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I=
|
||||
github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM=
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
|
||||
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
|
||||
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
||||
102
message.go
102
message.go
@@ -6,71 +6,8 @@ import (
|
||||
dg "github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
// built-in Discord reactions
|
||||
type Reaction string
|
||||
|
||||
// a few easy-to-use emojis, Discordgo/Discord API requires them to be saved like this.
|
||||
const (
|
||||
ReactionThumbsUp Reaction = "👍"
|
||||
ReactionThumbsDown Reaction = "👎"
|
||||
ReactionHundred Reaction = "💯"
|
||||
ReactionHeart Reaction = "❤️"
|
||||
ReactionPinkHeart Reaction = "🩷"
|
||||
ReactionOrangeHeart Reaction = "🧡"
|
||||
ReactionYellowHeart Reaction = "💛"
|
||||
ReactionGreenHeart Reaction = "💚"
|
||||
ReactionBlueHeart Reaction = "💙"
|
||||
ReactionBlackHeart Reaction = "🖤"
|
||||
ReactionPointUp Reaction = "☝️"
|
||||
ReactionPointDown Reaction = "👇"
|
||||
ReactionHotdog Reaction = "🌭"
|
||||
ReactionDog Reaction = "🐶"
|
||||
ReactionCat Reaction = "🐱"
|
||||
ReactionMonkey Reaction = "🐒"
|
||||
ReactionGiraffe Reaction = "🦒"
|
||||
ReactionDuck Reaction = "🦆"
|
||||
ReactionGoose Reaction = "🪿"
|
||||
ReactionWatermelon Reaction = "🍉"
|
||||
ReactionHoney Reaction = "🍯"
|
||||
ReactionSandwich Reaction = "🥪"
|
||||
ReactionPepper Reaction = "🌶️"
|
||||
ReactionNoPedestrians Reaction = "🚷"
|
||||
ReactionExclamation Reaction = "❗"
|
||||
ReactionDoubleExclamation Reaction = "‼️"
|
||||
ReactionSkull Reaction = "💀"
|
||||
ReactionSpeakingHead Reaction = "🗣️"
|
||||
ReactionGreenCheck Reaction = "✅"
|
||||
ReactionDragon Reaction = "🐉"
|
||||
)
|
||||
|
||||
// struct containing message event fields to prevent passing MessageCreate events and holding up routines
|
||||
type MessageCreateEvent struct {
|
||||
AuthorUsername string
|
||||
AuthorID string
|
||||
AuthorRoles []string
|
||||
MsgID string
|
||||
Msg string
|
||||
MsgChanID string
|
||||
MsgChanName string
|
||||
MsgGuildID string
|
||||
MsgGuildName string
|
||||
MsgAttachments []*dg.MessageAttachment
|
||||
}
|
||||
|
||||
// information about attachments to messages
|
||||
type MessageAttachment struct {
|
||||
ID string
|
||||
URL string
|
||||
ProxyURL string
|
||||
Filename string
|
||||
ContentType string
|
||||
Width int
|
||||
Height int
|
||||
Size int
|
||||
DurationSecs float64
|
||||
}
|
||||
|
||||
// represents a Discord message
|
||||
// the message struct is passed to the command payload providing basic
|
||||
// message information and needed methods
|
||||
type Message struct {
|
||||
Author string //username of message author
|
||||
ID string //discord ID of message author
|
||||
@@ -90,9 +27,42 @@ func (m *Message) React(emoji Reaction) error {
|
||||
return m.sesh.MessageReactionAdd(m.channelID, m.msgID, fmt.Sprint(emoji))
|
||||
}
|
||||
|
||||
// sends the value of res in response to the message
|
||||
// sends response to message
|
||||
func (m *Message) Respond(res string) error {
|
||||
rep := m.sesh.createReply(res, m.msgID, m.channelID, m.serverID)
|
||||
_, err := m.sesh.ChannelMessageSendComplex(m.channelID, rep)
|
||||
return err
|
||||
}
|
||||
|
||||
// deletes the message from the channel
|
||||
func (m *Message) Delete() error {
|
||||
return m.sesh.ChannelMessageDelete(m.channelID, m.msgID, nil)
|
||||
}
|
||||
|
||||
// this struct has all of the needed information from the messageCreate event so that
|
||||
// commands can be run asynchronously. Passing the messageCreate to payloads can block routines
|
||||
type MessageCreateEvent struct {
|
||||
AuthorUsername string
|
||||
AuthorID string
|
||||
AuthorRoles []string
|
||||
MsgID string
|
||||
Msg string
|
||||
MsgChanID string
|
||||
MsgChanName string
|
||||
MsgGuildID string
|
||||
MsgGuildName string
|
||||
MsgAttachments []*dg.MessageAttachment
|
||||
}
|
||||
|
||||
// message attachment details
|
||||
type MessageAttachment struct {
|
||||
ID string
|
||||
URL string
|
||||
ProxyURL string
|
||||
Filename string
|
||||
ContentType string
|
||||
Width int
|
||||
Height int
|
||||
Size int
|
||||
DurationSecs float64
|
||||
}
|
||||
|
||||
38
reaction.go
Normal file
38
reaction.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package bolt
|
||||
|
||||
// built-in Discord reactions
|
||||
type Reaction string
|
||||
|
||||
// a few easy-to-use emojis, Discordgo/Discord API requires them to be saved like this.
|
||||
const (
|
||||
ReactionThumbsUp Reaction = "👍"
|
||||
ReactionThumbsDown Reaction = "👎"
|
||||
ReactionHundred Reaction = "💯"
|
||||
ReactionHeart Reaction = "❤️"
|
||||
ReactionPinkHeart Reaction = "🩷"
|
||||
ReactionOrangeHeart Reaction = "🧡"
|
||||
ReactionYellowHeart Reaction = "💛"
|
||||
ReactionGreenHeart Reaction = "💚"
|
||||
ReactionBlueHeart Reaction = "💙"
|
||||
ReactionBlackHeart Reaction = "🖤"
|
||||
ReactionPointUp Reaction = "☝️"
|
||||
ReactionPointDown Reaction = "👇"
|
||||
ReactionHotdog Reaction = "🌭"
|
||||
ReactionDog Reaction = "🐶"
|
||||
ReactionCat Reaction = "🐱"
|
||||
ReactionMonkey Reaction = "🐒"
|
||||
ReactionGiraffe Reaction = "🦒"
|
||||
ReactionDuck Reaction = "🦆"
|
||||
ReactionGoose Reaction = "🪿"
|
||||
ReactionWatermelon Reaction = "🍉"
|
||||
ReactionHoney Reaction = "🍯"
|
||||
ReactionSandwich Reaction = "🥪"
|
||||
ReactionPepper Reaction = "🌶️"
|
||||
ReactionNoPedestrians Reaction = "🚷"
|
||||
ReactionExclamation Reaction = "❗"
|
||||
ReactionDoubleExclamation Reaction = "‼️"
|
||||
ReactionSkull Reaction = "💀"
|
||||
ReactionSpeakingHead Reaction = "🗣️"
|
||||
ReactionGreenCheck Reaction = "✅"
|
||||
ReactionDragon Reaction = "🐉"
|
||||
)
|
||||
Reference in New Issue
Block a user