moving code into repo

main
BraydonKains 3 years ago
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…
Cancel
Save