moving code into repo
parent
937285bf1d
commit
14121f675d
@ -0,0 +1,6 @@
|
|||||||
|
.PHONY: main.go
|
||||||
|
bubw:
|
||||||
|
go build -o bub.exe
|
||||||
|
|
||||||
|
bubl:
|
||||||
|
export GOOS=linux; export GOARCH=amd64; go build -o bub
|
@ -0,0 +1,63 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
)
|
||||||
|
|
||||||
|
var client = &http.Client{}
|
||||||
|
|
||||||
|
type CommandFunction func(s *discordgo.Session, m *discordgo.MessageCreate)
|
||||||
|
|
||||||
|
func InitCommands(s *discordgo.Session) {
|
||||||
|
s.AddHandler(commandHandler("greet", greetCommand))
|
||||||
|
s.AddHandler(commandHandler("dadjoke", dadJokeCommand))
|
||||||
|
}
|
||||||
|
|
||||||
|
func commandHandler(commandName string, handler CommandFunction) func(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
|
return func(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
|
if m.Content != "!"+commandName {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
handler(s, m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func greetCommand(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
|
greeting := `Hello! I'm Bub! I am a bot created for the Hubbub.
|
||||||
|
I was created by RageCage. Ask him for more info if you're interested in looking at my source code!`
|
||||||
|
s.ChannelMessageSend(m.ChannelID, greeting)
|
||||||
|
}
|
||||||
|
|
||||||
|
func dadJokeCommand(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
|
errorMessage := "I couldn't get a dad joke! Tell RageCage to check on me. :)"
|
||||||
|
req, err := http.NewRequest("GET", "https://icanhazdadjoke.com/", nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
s.ChannelMessageSend(m.ChannelID, errorMessage)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("Accept", "text/plain")
|
||||||
|
jokeResponse, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
s.ChannelMessageSend(m.ChannelID, errorMessage)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer jokeResponse.Body.Close()
|
||||||
|
|
||||||
|
jokeBytes, err := io.ReadAll(jokeResponse.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
s.ChannelMessageSend(m.ChannelID, errorMessage)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
joke := string(jokeBytes)
|
||||||
|
log.Println(joke)
|
||||||
|
s.ChannelMessageSend(m.ChannelID, joke)
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
token := getBotToken()
|
||||||
|
discord, err := discordgo.New("Bot " + token)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
InitCommands(discord)
|
||||||
|
InitRoleReactions(discord)
|
||||||
|
|
||||||
|
err = discord.Open()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("No connection, rip")
|
||||||
|
}
|
||||||
|
defer discord.Close()
|
||||||
|
|
||||||
|
log.Println("Bub is alive!")
|
||||||
|
sc := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
|
||||||
|
<-sc
|
||||||
|
}
|
||||||
|
|
||||||
|
func getBotToken() string {
|
||||||
|
token := os.Getenv("BOT_TOKEN")
|
||||||
|
if token == "" {
|
||||||
|
token = os.Args[1]
|
||||||
|
if token == "" {
|
||||||
|
log.Fatal("No BOT_TOKEN variable set in environment!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return token
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoleReaction struct {
|
||||||
|
RoleName string
|
||||||
|
RoleId string
|
||||||
|
EmojiName string
|
||||||
|
EmojiId string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerRoleAssignConfig struct {
|
||||||
|
GuildId string
|
||||||
|
RoleReactionMap map[string]RoleReaction
|
||||||
|
Message *discordgo.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerConfigOptionFunction func(s *discordgo.Session) ServerRoleAssignConfig
|
||||||
|
|
||||||
|
func InitRoleReactions(s *discordgo.Session) {
|
||||||
|
addHubbubHandlers(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func addHubbubHandlers(s *discordgo.Session) {
|
||||||
|
hubbubId := "827958531659530301"
|
||||||
|
roleAssignChannelId := "855923187354959872"
|
||||||
|
roleMap := map[string]RoleReaction{
|
||||||
|
"🤓": {
|
||||||
|
RoleName: "Streamer",
|
||||||
|
RoleId: "827959638267002880",
|
||||||
|
EmojiName: "nerd",
|
||||||
|
EmojiId: "🤓",
|
||||||
|
},
|
||||||
|
"😎": {
|
||||||
|
RoleName: "Viewer",
|
||||||
|
RoleId: "857793953125629992",
|
||||||
|
EmojiName: "sunglasses",
|
||||||
|
EmojiId: "😎",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
serverConfig := getServerConfig(
|
||||||
|
s,
|
||||||
|
hubbubId,
|
||||||
|
roleAssignChannelId,
|
||||||
|
roleMap,
|
||||||
|
)
|
||||||
|
s.AddHandler(roleAddHandler(serverConfig))
|
||||||
|
s.AddHandler(roleRemoveHandler(serverConfig))
|
||||||
|
}
|
||||||
|
|
||||||
|
func getServerConfig(
|
||||||
|
s *discordgo.Session,
|
||||||
|
guildId string,
|
||||||
|
roleAssignChannelId string,
|
||||||
|
roleMap map[string]RoleReaction,
|
||||||
|
) ServerRoleAssignConfig {
|
||||||
|
serverConfig := ServerRoleAssignConfig{
|
||||||
|
GuildId: guildId,
|
||||||
|
RoleReactionMap: roleMap,
|
||||||
|
}
|
||||||
|
|
||||||
|
messages, err := s.ChannelMessages(roleAssignChannelId, 1, "", "", "")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(messages) == 0 {
|
||||||
|
content := "React to this message to get a role!\n"
|
||||||
|
for emote, role := range roleMap {
|
||||||
|
content += fmt.Sprintf("%s : %s\n", emote, role.RoleName)
|
||||||
|
}
|
||||||
|
message, err := s.ChannelMessageSend(roleAssignChannelId, content)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, role := range roleMap {
|
||||||
|
err := s.MessageReactionAdd(roleAssignChannelId, message.ID, role.EmojiId)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
serverConfig.Message = message
|
||||||
|
} else {
|
||||||
|
serverConfig.Message = messages[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
return serverConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
func roleAddHandler(
|
||||||
|
serverConfig ServerRoleAssignConfig,
|
||||||
|
) func(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
|
||||||
|
return func(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
|
||||||
|
if r.MessageID != serverConfig.Message.ID {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if role, ok := serverConfig.RoleReactionMap[r.Emoji.Name]; ok {
|
||||||
|
err := s.GuildMemberRoleAdd(serverConfig.GuildId, r.UserID, role.RoleId)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func roleRemoveHandler(
|
||||||
|
serverConfig ServerRoleAssignConfig,
|
||||||
|
) func(s *discordgo.Session, r *discordgo.MessageReactionRemove) {
|
||||||
|
return func(s *discordgo.Session, r *discordgo.MessageReactionRemove) {
|
||||||
|
if r.MessageID != serverConfig.Message.ID {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if role, ok := serverConfig.RoleReactionMap[r.Emoji.Name]; ok {
|
||||||
|
err := s.GuildMemberRoleRemove(serverConfig.GuildId, r.UserID, role.RoleId)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue