Skip to content

Commit

Permalink
Added blacklist
Browse files Browse the repository at this point in the history
  • Loading branch information
FlameInTheDark committed May 6, 2019
1 parent 5ddae7e commit 29f8b3b
Show file tree
Hide file tree
Showing 6 changed files with 156 additions and 6 deletions.
8 changes: 4 additions & 4 deletions bot/albion.go
Expand Up @@ -196,7 +196,7 @@ func (ctx *Context) AlbionShowKills() {
for _, k := range kills {
fmt.Println("Killed " + k.Victim.Name)
var timeString string
t, err := time.Parse("2006-01-02T15:04:05.000000000Z", k.TimeStamp)
t, err := time.Parse(time.RFC3339Nano, k.TimeStamp)
if err == nil {
timeString = fmt.Sprintf("%v.%v.%v %v:%v", t.Day(), t.Month().String(), t.Year(), t.Hour(), t.Minute())
} else {
Expand Down Expand Up @@ -316,7 +316,7 @@ func SendPlayerKills(session *discordgo.Session, worker *DBWorker, conf *Config,
}
var newKillTime int64
for i, k := range kills {
killTime, err := time.Parse("2006-01-02T15:04:05.000000000Z", k.TimeStamp)
killTime, err := time.Parse(time.RFC3339Nano, k.TimeStamp)
if err != nil {
fmt.Println("Kill time parse error: ", err.Error())
continue
Expand Down Expand Up @@ -350,7 +350,7 @@ func (u *AlbionUpdater) Update(session *discordgo.Session, worker *DBWorker, con
}
var newKillTime int64
for i, k := range kills {
killTime, err := time.Parse("2006-01-02T15:04:05.000000000Z", k.TimeStamp)
killTime, err := time.Parse(time.RFC3339Nano, k.TimeStamp)
if err != nil {
fmt.Println("Kill time parse error: ", err.Error())
continue
Expand Down Expand Up @@ -386,7 +386,7 @@ func (ctx *Context) AlbionAddPlayer() error {
}
var lastKill int64
for _, k := range kills {
killTime, err := time.Parse("2006-01-02T15:04:05.000000000Z", k.TimeStamp)
killTime, err := time.Parse(time.RFC3339Nano, k.TimeStamp)
if err != nil {
continue
}
Expand Down
63 changes: 63 additions & 0 deletions bot/blacklist.go
@@ -0,0 +1,63 @@
package bot

// BlackList contains ignored guilds and users
type BlackListStruct struct {
Guilds []string
Users []string
}

// CheckGuild returns true if guild in blacklist
func (b BlackListStruct) CheckGuild(id string) bool {
for _,g := range b.Guilds {
if g == id {
return true
}
}
return false
}

// CheckUser returns true if user in blacklist
func (b BlackListStruct) CheckUser(id string) bool {
for _,g := range b.Users {
if g == id {
return true
}
}
return false
}

// BlacklistAddGuild adds guild in blacklist
func (ctx *Context) BlacklistAddGuild(id string) {
ctx.BlackList.Guilds = append(ctx.BlackList.Guilds, id)
ctx.DB.AddBlacklistGuild(id)
}

// BlacklistAddUser adds user in blacklist
func (ctx *Context) BlacklistAddUser(id string) {
ctx.BlackList.Users = append(ctx.BlackList.Users, id)
ctx.DB.AddBlacklistUser(id)
}

// BlacklistRemoveGuild removes guild from blacklist
func (ctx *Context) BlacklistRemoveGuild(id string) {
var newArray []string
for _, g := range ctx.BlackList.Guilds {
if g != id {
newArray = append(newArray, g)
}
}
ctx.BlackList.Guilds = newArray
ctx.DB.RemoveBlacklistGuild(id)
}

// BlacklistRemoveUser removes user from blacklist
func (ctx *Context) BlacklistRemoveUser(id string) {
var newArray []string
for _, u := range ctx.BlackList.Users {
if u != id {
newArray = append(newArray, u)
}
}
ctx.BlackList.Users = newArray
ctx.DB.RemoveBlacklistUser(id)
}
5 changes: 4 additions & 1 deletion bot/context.go
Expand Up @@ -30,12 +30,14 @@ type Context struct {
Guilds *GuildsMap
Twitch *Twitch
Albion *AlbionUpdater
BlackList *BlackListStruct
}

// NewContext create new context
func NewContext(botID string, discord *discordgo.Session, guild *discordgo.Guild, textChannel *discordgo.Channel,
user *discordgo.User, message *discordgo.MessageCreate, conf *Config, cmdHandler *CommandHandler,
sessions *SessionManager, youtube *Youtube, botMsg *BotMessages, dataType *DataType, dbWorker *DBWorker, guilds *GuildsMap, botCron *cron.Cron, twitch *Twitch, albion *AlbionUpdater) *Context {
sessions *SessionManager, youtube *Youtube, botMsg *BotMessages, dataType *DataType, dbWorker *DBWorker,
guilds *GuildsMap, botCron *cron.Cron, twitch *Twitch, albion *AlbionUpdater, blacklist *BlackListStruct) *Context {
ctx := new(Context)
ctx.BotID = botID
ctx.Discord = discord
Expand All @@ -54,6 +56,7 @@ func NewContext(botID string, discord *discordgo.Session, guild *discordgo.Guild
ctx.Cron = botCron
ctx.Twitch = twitch
ctx.Albion = albion
ctx.BlackList = blacklist
return ctx
}

Expand Down
60 changes: 60 additions & 0 deletions bot/database.go
Expand Up @@ -47,6 +47,10 @@ type RadioStation struct {
Category string
}

type BlackListElement struct {
ID string
}

// NewDBSession creates new MongoDB instance
func NewDBSession(dbname string) *DBWorker {
session, err := mgo.Dial(os.Getenv("MONGO_CONN"))
Expand Down Expand Up @@ -205,26 +209,30 @@ func (db *DBWorker) AddRadioStation(name, url, key, category string) error {
return err
}

// GetAlbionPlayers gets players from database
func (db *DBWorker) GetAlbionPlayers() []AlbionPlayerUpdater {
var kills []AlbionPlayerUpdater
_ = db.DBSession.DB(db.DBName).C("albion").Find(nil).All(&kills)
return kills
}

// AddAlbionPlayer adds new player in database
func (db *DBWorker) AddAlbionPlayer(player *AlbionPlayerUpdater) {
err := db.DBSession.DB(db.DBName).C("albion").Insert(player)
if err != nil {
fmt.Println("Error adding Albion player: ", err.Error())
}
}

// RemoveAlbionPlayer removes player from database
func (db *DBWorker) RemoveAlbionPlayer(id string) {
err := db.DBSession.DB(db.DBName).C("albion").Remove(bson.M{"userid": id})
if err != nil {
fmt.Println("Error removing Albion player: ", err.Error())
}
}

// UpdateAlbionPlayerLast updates last kill of albion player
func (db *DBWorker) UpdateAlbionPlayerLast(userID string, lastKill int64) {
err := db.DBSession.DB(db.DBName).C("albion").
Update(
Expand All @@ -234,3 +242,55 @@ func (db *DBWorker) UpdateAlbionPlayerLast(userID string, lastKill int64) {
fmt.Println(err.Error())
}
}

// GetBlackList gets blacklist from database
func (db *DBWorker) GetBlacklist() *BlackListStruct {
var (
blacklist BlackListStruct
Guilds []BlackListElement
Users []BlackListElement
)
_ = db.DBSession.DB(db.DBName).C("blusers").Find(nil).All(&Users)
_ = db.DBSession.DB(db.DBName).C("blguilds").Find(nil).All(&Guilds)

for _, g := range Guilds {
blacklist.Guilds = append(blacklist.Guilds, g.ID)
}
for _, u := range Users {
blacklist.Users = append(blacklist.Users, u.ID)
}

return &blacklist
}

// AddBlacklistGuild adds guild in database blacklist
func (db *DBWorker) AddBlacklistGuild(id string) {
err := db.DBSession.DB(db.DBName).C("blguilds").Insert(BlackListElement{ID: id})
if err != nil {
fmt.Println("Error adding guild in blacklist: ", err.Error())
}
}

// AddBlacklistUser adds user in database blacklist
func (db *DBWorker) AddBlacklistUser(id string) {
err := db.DBSession.DB(db.DBName).C("blusers").Insert(BlackListElement{ID: id})
if err != nil {
fmt.Println("Error adding user in blacklist: ", err.Error())
}
}

// RemoveBlacklistGuild removes guild from database blacklist
func (db *DBWorker) RemoveBlacklistGuild(id string) {
err := db.DBSession.DB(db.DBName).C("blguilds").Remove(bson.M{"id": id})
if err != nil {
fmt.Println("Error removing guild from blacklist: ", err.Error())
}
}

// RemoveBlacklistUser removes user from database blacklist
func (db *DBWorker) RemoveBlacklistUser(id string) {
err := db.DBSession.DB(db.DBName).C("blusers").Remove(bson.M{"id": id})
if err != nil {
fmt.Println("Error removing user from blacklist: ", err.Error())
}
}
18 changes: 18 additions & 0 deletions cmd/botcommand.go
Expand Up @@ -70,6 +70,8 @@ func BotCommand(ctx bot.Context) {
users += len(g.Members)
}
ctx.ReplyEmbed("Stats", fmt.Sprintf(ctx.Loc("stats_command"), len(ctx.Discord.State.Guilds), users))
case "blacklist":
botBlacklist(&ctx)
}
} else {
ctx.ReplyEmbed("Bot", ctx.Loc("admin_require"))
Expand Down Expand Up @@ -357,3 +359,19 @@ func botStations(ctx *bot.Context) {
}
}
}

func botBlacklist(ctx *bot.Context) {
if len(ctx.Args) > 2 {
switch ctx.Args[1] {
case "addguild":
ctx.BlacklistAddGuild(ctx.Args[2])
case "adduser":
ctx.BlacklistAddUser(ctx.Args[2])
case "removeuser":
ctx.BlacklistRemoveUser(ctx.Args[2])
case "removeguild":
ctx.BlacklistRemoveGuild(ctx.Args[2])
}
}

}
8 changes: 7 additions & 1 deletion main.go
Expand Up @@ -33,6 +33,7 @@ var (
botCron *cron.Cron
twitch *bot.Twitch
albUpdater *bot.AlbionUpdater
blacklist *bot.BlackListStruct
messagesCounter int
)

Expand Down Expand Up @@ -79,6 +80,7 @@ func main() {
defer dbWorker.DBSession.Close()
twitch = bot.TwitchInit(discord, conf, dbWorker)
albUpdater = bot.AlbionGetUpdater(dbWorker)
blacklist = dbWorker.GetBlacklist()
go BotUpdater(discord)
// Init command handler
discord.AddHandler(guildAddHandler)
Expand Down Expand Up @@ -109,6 +111,9 @@ func guildAddHandler(discord *discordgo.Session, e *discordgo.GuildCreate) {

// Handle discord messages
func commandHandler(discord *discordgo.Session, message *discordgo.MessageCreate) {
if blacklist.CheckGuild(message.GuildID) && blacklist.CheckUser(message.Author.ID) {
return
}
messagesCounter++
user := message.Author
if user.ID == botId || user.Bot {
Expand Down Expand Up @@ -165,7 +170,8 @@ func commandHandler(discord *discordgo.Session, message *discordgo.MessageCreate
guilds,
botCron,
twitch,
albUpdater)
albUpdater,
blacklist)
ctx.Args = args[1:]
c := *command
c(*ctx)
Expand Down

0 comments on commit 29f8b3b

Please sign in to comment.