Skip to content
This repository has been archived by the owner on Aug 16, 2022. It is now read-only.

Commit

Permalink
v1.4.1: Added !ud for urban dictionary
Browse files Browse the repository at this point in the history
Also reorganised files a bit
  • Loading branch information
wneessen committed May 23, 2021
1 parent 66cd5cc commit 8a6440e
Show file tree
Hide file tree
Showing 27 changed files with 172 additions and 81 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MODNAME := github.com/wneessen/sotbot
SPACE := $(null) $(null)
CURVER := 1.4.0
CURVER := 1.4.1-DEV
CURARCH := $(shell uname -m | tr 'A-Z' 'a-z')
CUROS := $(shell uname -s | tr 'A-Z' 'a-z')
BUILDARCH := $(CUROS)_$(CURARCH)
Expand Down
2 changes: 1 addition & 1 deletion sotapi/string_to_int.go → api/api_string_to_int.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package sotapi
package api

import (
"fmt"
Expand Down
2 changes: 1 addition & 1 deletion sotapi/achievement.go → api/sot_achievement.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package sotapi
package api

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion sotapi/balance.go → api/sot_balance.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package sotapi
package api

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion sotapi/reputation.go → api/sot_reputation.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package sotapi
package api

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion sotapi/season.go → api/sot_season.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package sotapi
package api

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion sotapi/stats.go → api/sot_stats.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package sotapi
package api

import (
"encoding/json"
Expand Down
41 changes: 41 additions & 0 deletions api/urbandict_term.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package api

import (
"encoding/json"
"fmt"
log "github.com/sirupsen/logrus"
"github.com/wneessen/sotbot/httpclient"
"net/http"
)

type UrbanDictEntry struct {
Definition string `json:"definition"`
PermaLink string `json:"permalink"`
Example string `json:"example"`
Author string `json:"author"`
}

type UrbanDict struct {
List []UrbanDictEntry `json:"list"`
}

func GetUrbanDict(hc *http.Client, w string) (UrbanDictEntry, error) {
l := log.WithFields(log.Fields{
"action": "api.GetUrbanDict",
})

var urbanReps UrbanDict
apiUrl := fmt.Sprintf("https://api.urbandictionary.com/v0/define?term=%v", w)

l.Debugf("Fetching UD definition fact from UD API...")
httpResp, err := httpclient.HttpReqGet(apiUrl, hc, "", "")
if err != nil {
return UrbanDictEntry{}, err
}
if err := json.Unmarshal(httpResp, &urbanReps); err != nil {
l.Errorf("Failed to unmarshal API response: %v", err)
return UrbanDictEntry{}, err
}

return urbanReps.List[0], nil
}
2 changes: 1 addition & 1 deletion factapi/randomfact.go → api/uselessfact_random.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package factapi
package api

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion bot/audio_load.go → audio/load.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package bot
package audio

import (
"encoding/binary"
Expand Down
17 changes: 0 additions & 17 deletions bot/announce.go

This file was deleted.

3 changes: 2 additions & 1 deletion bot/bot.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"github.com/wneessen/sotbot/audio"
"github.com/wneessen/sotbot/database"
"github.com/wneessen/sotbot/httpclient"
"gorm.io/gorm"
Expand Down Expand Up @@ -51,7 +52,7 @@ func NewBot(c *viper.Viper) Bot {
l.Debugf("Loading audio file %q as %q into memory", fn, af)

audioBuffer := make([][]byte, 0)
if err := LoadAudio("./media/audio/"+fn, &audioBuffer); err != nil {
if err := audio.LoadAudio("./media/audio/"+fn, &audioBuffer); err != nil {
l.Errorf("Failed to load audio file into memory: %v", err)
break
}
Expand Down
74 changes: 43 additions & 31 deletions bot/command_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
"github.com/wneessen/sotbot/handler"
"github.com/wneessen/sotbot/response"
"github.com/wneessen/sotbot/user"
"strings"
)
Expand Down Expand Up @@ -56,19 +57,19 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
// Placeholder for the legacy !airhorn command
case command == "!airhorn" && cmdNum == 1:
re := "The !airhorn command has been renamed to `!play <soundname>`. Try `!play airhorn` instead"
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
return

// Tell us the current time
case command == "!time" && cmdNum == 1:
re, me := handler.TellTime()
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// Version information
case command == "!version" && cmdNum == 1:
re, me := handler.TellVersion()
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// Play a registered sound in a voice chat
Expand All @@ -86,13 +87,13 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
err := handler.PlaySound(guildObj.VoiceStates, s, *b.Audio[soundName].Buffer, userObj.AuthorId, guildObj.ID)
if err != nil {
re := fmt.Sprintf("An error occured when playing the sound: %v", err.Error())
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
b.AudioMutex.Unlock()
return
}
re := fmt.Sprintf("I don't have a registered sound file named %q", soundName)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
return

// Show some memory statistics
Expand All @@ -101,24 +102,35 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
return
}
re, me := handler.TellMemUsage()
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// Reply with a help text in the DMs
case command == "!help" && cmdNum == 1:
re, me := handler.Help()
DmUser(s, &userObj, re, me)
response.DmUser(s, &userObj, re, me)
return

// Reply with random useless fact
case command == "!fact" && cmdNum == 1:
re, me, err := handler.RandomFact(b.HttpClient)
if err != nil {
re = fmt.Sprintf("An error occured while fetching the random fact API: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
return
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// Check Urban dictionary for the provided word
case (command == "!ud" || command == "!urban") && cmdNum == 2:
em, err := handler.UrbanDict(b.HttpClient, msgArray[1])
if err != nil {
re := fmt.Sprintf("An error occured while fetching the urban dictionary API: %v", err)
response.AnswerUser(s, m, re, true)
return
}
response.Embed(s, chanInfo.ID, em)
return

// SoT: Show user's balance
Expand All @@ -135,13 +147,13 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
dmMsg := fmt.Sprintf("The last 3 attempts to communicate with the SoT API failed. " +
"This likely means, that your RAT cookie has expired. Please use the !setrat function to " +
"update your cookie.")
DmUser(s, &userObj, dmMsg, true)
response.DmUser(s, &userObj, dmMsg, true)
} else {
re = fmt.Sprintf("An error occured checking your SoT balance: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// SoT: Show user's season progress
Expand All @@ -155,9 +167,9 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
re, me, err := handler.GetSotSeasonProgress(b.HttpClient, &userObj)
if err != nil {
re = fmt.Sprintf("An error occured checking your SoT season progress: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// SoT: Show user's reputation with a faction/company
Expand All @@ -171,9 +183,9 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
re, me, err := handler.GetSotReputation(b.HttpClient, &userObj, msgArray[1])
if err != nil {
re = fmt.Sprintf("An error occured checking your SoT reputation level: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// SoT: Show user's general stats
Expand All @@ -187,9 +199,9 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
re, me, err := handler.GetSotStats(b.HttpClient, &userObj)
if err != nil {
re = fmt.Sprintf("An error occured checking your SoT general stats: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// SoT: Show user's latest achievement
Expand All @@ -203,41 +215,41 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
em, err := handler.GetSotAchievement(b.HttpClient, &userObj)
if err != nil {
re := fmt.Sprintf("An error occured checking your SoT latest achievement: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
Embed(s, m.ChannelID, em)
response.Embed(s, m.ChannelID, em)
return

// SoT: Quote a random SoT pirate code article
case command == "!code" && cmdNum == 1:
em, err := handler.GetSotRandomCode()
if err != nil {
re := fmt.Sprintf("An error occured quoting the SoT pirate code: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
Embed(s, m.ChannelID, em)
response.Embed(s, m.ChannelID, em)
return

// SoT: Set RAT cookie
case (command == "!setrat" || command == "!rat") && cmdNum == 2:
if chanInfo.Type != discordgo.ChannelTypeDM {
re := "You exposed your RAT cookie to a public channel. Please change your password immediately."
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
return
}
re, me, err := handler.UserSetRatCookie(b.Db, &userObj, msgArray[1])
if err != nil {
re := fmt.Sprintf("An error occured setting/updating your RAT cookie: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
return
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// User management: Tell the user if they are registered
case (command == "!userinfo" || command == "!info") && cmdNum == 1:
re, me := handler.UserIsRegistered(&userObj)
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// User management: Register a new user
Expand All @@ -251,9 +263,9 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
re, me, err := handler.RegisterUser(b.Db, msgArray[1])
if err != nil {
re := fmt.Sprintf("An error occured registering user: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

// User management: Un-register a new user
Expand All @@ -267,14 +279,14 @@ func (b *Bot) CommandHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
re, me, err := handler.UnregisterUser(b.Db, msgArray[1])
if err != nil {
re := fmt.Sprintf("An error occured registering user: %v", err)
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
}
AnswerUser(s, m, re, me)
response.AnswerUser(s, m, re, me)
return

default:
re := "Unknown command"
AnswerUser(s, m, re, true)
response.AnswerUser(s, m, re, true)
return
}
}
Loading

0 comments on commit 8a6440e

Please sign in to comment.