2020-05-30 08:35:45 +00:00
package discord
2020-06-06 12:28:45 +00:00
import (
"context"
"fmt"
2020-07-19 14:21:32 +00:00
"log"
2020-06-06 12:28:45 +00:00
"strconv"
"github.com/bwmarrin/discordgo"
2020-07-19 11:40:53 +00:00
"github.com/nicksnyder/go-i18n/v2/i18n"
"github.com/tribalwarshelp/dcbot/message"
2020-06-06 12:28:45 +00:00
"github.com/tribalwarshelp/dcbot/models"
2020-07-09 11:30:02 +00:00
"github.com/tribalwarshelp/dcbot/utils"
2020-06-27 16:48:33 +00:00
shared_models "github.com/tribalwarshelp/shared/models"
2020-06-06 12:28:45 +00:00
)
const (
2020-07-19 11:40:53 +00:00
observationsPerGroup = 10
groupsPerServer = 5
2020-06-06 12:28:45 +00:00
)
const (
2020-07-19 14:56:05 +00:00
AddGroupCommand Command = "addgroup"
DeleteGroupCommand Command = "deletegroup"
GroupsCommand Command = "groups"
ShowEnnobledBarbariansCommand Command = "showennobledbarbs"
ObserveCommand Command = "observe"
ObservationsCommand Command = "observations"
DeleteObservationCommand Command = "deleteobservation"
LostVillagesCommand Command = "lostvillages"
DisableLostVillagesCommand Command = "disablelostvillages"
ConqueredVillagesCommand Command = "conqueredvillages"
DisableConqueredVillagesCommand Command = "disableconqueredvillages"
2020-07-19 15:21:44 +00:00
ChangeLanguageCommand Command = "changelanguage"
2020-07-27 15:54:51 +00:00
ShowInternalsCommand Command = "showinternals"
2020-05-30 08:35:45 +00:00
)
2020-07-19 11:40:53 +00:00
func ( s * Session ) handleAddGroupCommand ( ctx commandCtx , m * discordgo . MessageCreate ) {
2020-06-26 07:47:33 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
2020-07-19 11:40:53 +00:00
if len ( ctx . server . Groups ) >= groupsPerServer {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 11:40:53 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "addGroup.groupLimitHasBeenReached" ,
DefaultMessage : message . FallbackMsg ( "addGroup.groupLimitHasBeenReached" ,
"{{.Mention}} The group limit has been reached ({{.Total}}/{{.Limit}})." ) ,
2020-07-19 11:40:53 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
"Total" : len ( ctx . server . Groups ) ,
"Limit" : groupsPerServer ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
group := & models . Group {
2020-07-15 09:51:49 +00:00
ServerID : m . GuildID ,
ShowEnnobledBarbarians : true ,
2020-06-26 18:30:25 +00:00
}
2020-07-19 11:40:53 +00:00
2020-06-26 18:30:25 +00:00
if err := s . cfg . GroupRepository . Store ( context . Background ( ) , group ) ; err != nil {
s . SendMessage ( m . ChannelID ,
2020-07-19 11:40:53 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
2020-07-19 11:40:53 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
s . SendMessage ( m . ChannelID ,
2020-07-19 11:40:53 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "addGroup.success" ,
DefaultMessage : message . FallbackMsg ( "addGroup.success" ,
"{{.Mention}} A new group has been created (ID: {{.ID}})." ) ,
2020-07-19 11:40:53 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
"ID" : group . ID ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
}
2020-07-19 15:21:44 +00:00
2020-07-19 11:50:01 +00:00
func ( s * Session ) handleDeleteGroupCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 11:50:01 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "help.deletegroup" ,
DefaultMessage : message . FallbackMsg ( "help.deletegroup" ,
"**{{.Command}}** [group id from {{.GroupsCommand}}] - deletes an observation group." ) ,
2020-07-19 11:50:01 +00:00
TemplateData : map [ string ] interface { } {
"Command" : DeleteGroupCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
groupID , err := strconv . Atoi ( args [ 0 ] )
if err != nil {
s . SendMessage ( m . ChannelID ,
2020-07-19 11:50:01 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "deleteGroup.invalidID" ,
DefaultMessage : message . FallbackMsg ( "deleteGroup.invalidID" ,
"{{.Mention}} The group ID must be a number greater than 0." ) ,
2020-07-19 11:50:01 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
go s . cfg . GroupRepository . Delete ( context . Background ( ) , & models . GroupFilter {
ID : [ ] int { groupID } ,
ServerID : [ ] string { m . GuildID } ,
} )
s . SendMessage ( m . ChannelID ,
2020-07-19 11:50:01 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "deleteGroup.success" ,
DefaultMessage : message . FallbackMsg ( "deleteGroup.success" ,
"{{.Mention}} The group has been deleted." ) ,
2020-07-19 11:50:01 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
}
2020-08-08 12:02:32 +00:00
func getEmojiForGroupsCommand ( val bool ) string {
if val {
return ":white_check_mark:"
}
return ":x:"
}
2020-07-19 12:22:41 +00:00
func ( s * Session ) handleGroupsCommand ( ctx commandCtx , m * discordgo . MessageCreate ) {
2020-06-26 18:30:25 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
groups , _ , err := s . cfg . GroupRepository . Fetch ( context . Background ( ) , & models . GroupFilter {
ServerID : [ ] string { m . GuildID } ,
2020-07-15 09:51:49 +00:00
Order : [ ] string { "id ASC" } ,
2020-06-26 18:30:25 +00:00
} )
if err != nil {
return
}
msg := ""
for i , groups := range groups {
2020-08-08 12:02:32 +00:00
msg += fmt . Sprintf ( "**%d** | %d | %s | %s | %s | %s\n" , i + 1 ,
groups . ID ,
getEmojiForGroupsCommand ( groups . ConqueredVillagesChannelID != "" ) ,
getEmojiForGroupsCommand ( groups . LostVillagesChannelID != "" ) ,
getEmojiForGroupsCommand ( groups . ShowEnnobledBarbarians ) ,
getEmojiForGroupsCommand ( groups . ShowInternals ) ,
)
2020-06-26 18:30:25 +00:00
}
if msg == "" {
2020-07-19 12:22:41 +00:00
msg = ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "groups.noGroupsAdded" ,
DefaultMessage : message . FallbackMsg ( "groups.noGroupsAdded" , "No groups added" ) ,
} )
2020-06-26 18:30:25 +00:00
}
s . SendEmbed ( m . ChannelID , NewEmbed ( ) .
2020-07-19 12:22:41 +00:00
SetTitle ( ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "groups.title" ,
DefaultMessage : message . FallbackMsg ( "groups.title" , "Group list" ) ,
} ) ) .
2020-08-08 12:02:32 +00:00
AddField ( ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "groups.fieldTitle" ,
DefaultMessage : message . FallbackMsg ( "groups.fieldTitle" , "Index | ID | Conquer | Loss | Barbarian | Internal" ) ,
} ) , msg ) .
2020-06-26 18:30:25 +00:00
MessageEmbed )
}
2020-07-19 12:22:41 +00:00
func ( s * Session ) handleConqueredVillagesCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "help.conqueredvillages" ,
DefaultMessage : message . FallbackMsg ( "help.conqueredvillages" ,
2020-07-21 09:51:58 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - changes the channel on which notifications about conquered village will show. **IMPORTANT!** Run this command on the channel you want to display these notifications." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Command" : ConqueredVillagesCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
groupID , err := strconv . Atoi ( args [ 0 ] )
2020-06-26 07:47:33 +00:00
if err != nil {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "conqueredVillages.invalidID" ,
DefaultMessage : message . FallbackMsg ( "conqueredVillages.invalidID" ,
"{{.Mention}} The group ID must be a number greater than 0." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 07:47:33 +00:00
return
}
2020-06-26 18:30:25 +00:00
groups , _ , err := s . cfg . GroupRepository . Fetch ( context . Background ( ) , & models . GroupFilter {
ID : [ ] int { groupID } ,
ServerID : [ ] string { m . GuildID } ,
} )
if err != nil || len ( groups ) == 0 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "conqueredVillages.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "conqueredVillages.groupNotFound" ,
"{{.Mention}} Group not found." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
groups [ 0 ] . ConqueredVillagesChannelID = m . ChannelID
go s . cfg . GroupRepository . Update ( context . Background ( ) , groups [ 0 ] )
2020-06-26 07:47:33 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "conqueredVillages.success" ,
DefaultMessage : message . FallbackMsg ( "conqueredVillages.success" ,
"{{.Mention}} Channel changed successfully." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 07:47:33 +00:00
}
2020-07-19 14:56:05 +00:00
func ( s * Session ) handleDisableConqueredVillagesCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 07:47:33 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "help.disableconqueredvillages" ,
DefaultMessage : message . FallbackMsg ( "help.disableconqueredvillages" ,
2020-07-19 13:03:53 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - disable notifications about conquered villages." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
2020-07-19 14:56:05 +00:00
"Command" : DisableConqueredVillagesCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
2020-07-19 12:22:41 +00:00
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
2020-06-26 07:47:33 +00:00
}
2020-06-26 18:30:25 +00:00
groupID , err := strconv . Atoi ( args [ 0 ] )
2020-06-26 07:47:33 +00:00
if err != nil {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "disableConqueredVillages.invalidID" ,
DefaultMessage : message . FallbackMsg ( "disableConqueredVillages.invalidID" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} The group ID must be a number greater than 0." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 07:47:33 +00:00
return
}
2020-06-26 18:30:25 +00:00
groups , _ , err := s . cfg . GroupRepository . Fetch ( context . Background ( ) , & models . GroupFilter {
ID : [ ] int { groupID } ,
ServerID : [ ] string { m . GuildID } ,
} )
if err != nil || len ( groups ) == 0 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "disableConqueredVillages.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "disableConqueredVillages.groupNotFound" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} Group not found." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
if groups [ 0 ] . ConqueredVillagesChannelID != "" {
groups [ 0 ] . ConqueredVillagesChannelID = ""
go s . cfg . GroupRepository . Update ( context . Background ( ) , groups [ 0 ] )
2020-06-26 07:47:33 +00:00
}
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "disableConqueredVillages.success" ,
DefaultMessage : message . FallbackMsg ( "disableConqueredVillages.success" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} Notifications about conquered villages will no longer show up." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 07:47:33 +00:00
}
2020-07-19 12:22:41 +00:00
func ( s * Session ) handleLostVillagesCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "help.lostvillages" ,
DefaultMessage : message . FallbackMsg ( "help.lostvillages" ,
2020-07-21 09:51:58 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] changes the channel on which notifications about lost village will show. **IMPORTANT!** Run this command on the channel you want to display these notifications." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Command" : LostVillagesCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
2020-06-06 12:28:45 +00:00
}
2020-06-26 18:30:25 +00:00
groupID , err := strconv . Atoi ( args [ 0 ] )
2020-06-06 12:28:45 +00:00
if err != nil {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "lostVillages.invalidID" ,
DefaultMessage : message . FallbackMsg ( "lostVillages.invalidID" ,
"{{.Mention}} The group ID must be a number greater than 0." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
groups , _ , err := s . cfg . GroupRepository . Fetch ( context . Background ( ) , & models . GroupFilter {
ID : [ ] int { groupID } ,
ServerID : [ ] string { m . GuildID } ,
} )
if err != nil || len ( groups ) == 0 {
2020-07-19 14:21:32 +00:00
log . Print ( groups )
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "lostVillages.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "lostVillages.groupNotFound" ,
"{{.Mention}} Group not found." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
2020-07-19 12:22:41 +00:00
2020-06-26 18:30:25 +00:00
groups [ 0 ] . LostVillagesChannelID = m . ChannelID
go s . cfg . GroupRepository . Update ( context . Background ( ) , groups [ 0 ] )
2020-06-06 12:28:45 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "lostVillages.success" ,
DefaultMessage : message . FallbackMsg ( "lostVillages.success" ,
"{{.Mention}} Channel changed successfully." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
}
2020-07-19 14:56:05 +00:00
func ( s * Session ) handleDisableLostVillagesCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "help.disablelostvillages" ,
DefaultMessage : message . FallbackMsg ( "help.disablelostvillages" ,
2020-07-19 13:03:53 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - disable notifications about lost villages." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
2020-07-19 14:56:05 +00:00
"Command" : DisableLostVillagesCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
2020-07-19 12:22:41 +00:00
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
2020-06-06 12:28:45 +00:00
}
2020-06-26 18:30:25 +00:00
groupID , err := strconv . Atoi ( args [ 0 ] )
2020-06-06 12:28:45 +00:00
if err != nil {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "disableLostVillages.invalidID" ,
DefaultMessage : message . FallbackMsg ( "disableLostVillages.invalidID" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} The group ID must be a number greater than 0." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
groups , _ , err := s . cfg . GroupRepository . Fetch ( context . Background ( ) , & models . GroupFilter {
ID : [ ] int { groupID } ,
ServerID : [ ] string { m . GuildID } ,
} )
if err != nil || len ( groups ) == 0 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "disableLostVillages.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "disableLostVillages.groupNotFound" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} Group not found." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
if groups [ 0 ] . LostVillagesChannelID != "" {
groups [ 0 ] . LostVillagesChannelID = ""
go s . cfg . GroupRepository . Update ( context . Background ( ) , groups [ 0 ] )
2020-06-26 07:47:33 +00:00
}
2020-06-26 18:30:25 +00:00
2020-06-06 12:28:45 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "disableLostVillages.success" ,
DefaultMessage : message . FallbackMsg ( "disableLostVillages.success" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} Notifications about lost villages will no longer show up." ) ,
2020-07-19 12:22:41 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
}
2020-07-19 12:47:34 +00:00
func ( s * Session ) handleObserveCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
2020-06-26 18:30:25 +00:00
if argsLength > 3 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 3 : argsLength ] ... )
2020-06-06 12:28:45 +00:00
return
2020-06-26 18:30:25 +00:00
} else if argsLength < 3 {
2020-06-06 12:28:45 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:47:34 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "help.observe" ,
DefaultMessage : message . FallbackMsg ( "help.observe" ,
"**{{.Command}}** [group id from {{.GroupsCommand}}] [server] [tribe id] - command adds a tribe to the observation group." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Command" : ObserveCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
groupID , err := strconv . Atoi ( args [ 0 ] )
if err != nil {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:47:34 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "observe.invalidGroupID" ,
DefaultMessage : message . FallbackMsg ( "observe.invalidGroupID" ,
"{{.Mention}} The group ID must be a number greater than 0." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
serverKey := args [ 1 ]
tribeID , err := strconv . Atoi ( args [ 2 ] )
2020-06-27 16:48:33 +00:00
if err != nil || tribeID <= 0 {
2020-06-06 12:28:45 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:47:34 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "observe.invalidTribeID" ,
DefaultMessage : message . FallbackMsg ( "observe.invalidTribeID" ,
"{{.Mention}} The tribe ID must be a number greater than 0." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
server , err := s . cfg . API . Servers . Read ( serverKey , nil )
2020-06-07 15:49:33 +00:00
if err != nil || server == nil {
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observe.serverNotFound" ,
DefaultMessage : message . FallbackMsg ( "observe.serverNotFound" , "{{.Mention}} Server not found." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-07 15:49:33 +00:00
return
}
if server . Status == shared_models . ServerStatusClosed {
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observe.serverIsClosed" ,
DefaultMessage : message . FallbackMsg ( "observe.serverIsClosed" , "{{.Mention}} Server is closed." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-07 15:49:33 +00:00
return
}
2020-06-26 18:30:25 +00:00
tribe , err := s . cfg . API . Tribes . Read ( server . Key , tribeID )
2020-06-06 12:28:45 +00:00
if err != nil || tribe == nil {
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observe.tribeNotFound" ,
DefaultMessage : message . FallbackMsg ( "observe.tribeNotFound" , "{{.Mention}} Tribe not found." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
group , err := s . cfg . GroupRepository . GetByID ( context . Background ( ) , groupID )
if err != nil || group . ServerID != m . GuildID {
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observe.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "observe.groupNotFound" , "{{.Mention}} Group not found." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-07-19 11:40:53 +00:00
if len ( group . Observations ) >= observationsPerGroup {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:47:34 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "observe.observationLimitHasBeenReached" ,
DefaultMessage : message . FallbackMsg ( "observe.observationLimitHasBeenReached" ,
"{{.Mention}} The observation limit for this group has been reached ({{.Total}}/{{.Limit}})." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
"Total" : len ( group . Observations ) ,
"Limit" : observationsPerGroup ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-18 12:51:31 +00:00
err = s . cfg . ObservationRepository . Store ( context . Background ( ) , & models . Observation {
2020-06-26 18:30:25 +00:00
Server : server . Key ,
TribeID : tribeID ,
GroupID : groupID ,
2020-06-06 12:28:45 +00:00
} )
if err != nil {
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 13:03:53 +00:00
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID , ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observe.success" ,
DefaultMessage : message . FallbackMsg ( "observe.success" , "{{.Mention}} Added." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
}
2020-07-19 14:56:05 +00:00
func ( s * Session ) handleDeleteObservationCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
2020-06-26 18:30:25 +00:00
if argsLength > 2 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 2 : argsLength ] ... )
2020-06-06 12:28:45 +00:00
return
2020-06-26 18:30:25 +00:00
} else if argsLength < 2 {
2020-06-06 12:28:45 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 13:03:53 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "help.deleteobservation" ,
DefaultMessage : message . FallbackMsg ( "help.deleteobservation" ,
2020-07-19 13:03:53 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] [id from {{.ObservationsCommand}}] - removes a tribe from the observation group." ) ,
TemplateData : map [ string ] interface { } {
2020-07-19 14:56:05 +00:00
"Command" : DeleteObservationCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
2020-07-19 13:03:53 +00:00
"ObservationsCommand" : ObservationsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
groupID , err := strconv . Atoi ( args [ 0 ] )
2020-06-06 12:28:45 +00:00
if err != nil {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:03:53 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "deleteObservation.invalidGroupID" ,
DefaultMessage : message . FallbackMsg ( "deleteObservation.invalidGroupID" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} The group ID must be a number greater than 0." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
observationID , err := strconv . Atoi ( args [ 1 ] )
if err != nil {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:03:53 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "deleteObservation.invalidTribeID" ,
DefaultMessage : message . FallbackMsg ( "deleteObservation.invalidTribeID" ,
2020-07-19 13:03:53 +00:00
"{{.Mention}} The tribe ID must be a number greater than 0." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-06-26 18:30:25 +00:00
group , err := s . cfg . GroupRepository . GetByID ( context . Background ( ) , groupID )
if err != nil || group . ServerID != m . GuildID {
2020-07-19 13:03:53 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-19 14:56:05 +00:00
MessageID : "deleteObservation.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "deleteObservation.groupNotFound" , "{{.Mention}} Group not found." ) ,
2020-07-19 13:03:53 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
2020-06-18 12:51:31 +00:00
go s . cfg . ObservationRepository . Delete ( context . Background ( ) , & models . ObservationFilter {
2020-06-26 18:30:25 +00:00
GroupID : [ ] int { groupID } ,
ID : [ ] int { observationID } ,
2020-06-06 12:28:45 +00:00
} )
2020-07-19 13:03:53 +00:00
s . SendMessage ( m . ChannelID , ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "unObserve.success" ,
DefaultMessage : message . FallbackMsg ( "unObserve.success" , "{{.Mention}} Deleted." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
}
2020-07-19 13:12:52 +00:00
func ( s * Session ) handleObservationsCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:12:52 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "help.observations" ,
DefaultMessage : message . FallbackMsg ( "help.observations" ,
2020-09-03 13:13:49 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - shows a list of observed tribes by this group." ) ,
2020-07-19 13:12:52 +00:00
TemplateData : map [ string ] interface { } {
"Command" : ObservationsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
groupID , err := strconv . Atoi ( args [ 0 ] )
if err != nil {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:12:52 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observations.invalidGroupID" ,
DefaultMessage : message . FallbackMsg ( "observations.invalidGroupID" ,
"{{.Mention}} The group ID must be a number greater than 0." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
group , err := s . cfg . GroupRepository . GetByID ( context . Background ( ) , groupID )
if err != nil || group . ServerID != m . GuildID {
2020-07-19 13:12:52 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observations.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "observations.groupNotFound" , "{{.Mention}} Group not found." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-26 18:30:25 +00:00
return
}
2020-06-18 12:51:31 +00:00
observations , _ , err := s . cfg . ObservationRepository . Fetch ( context . Background ( ) , & models . ObservationFilter {
2020-06-26 18:30:25 +00:00
GroupID : [ ] int { groupID } ,
2020-07-15 09:51:49 +00:00
Order : [ ] string { "id ASC" } ,
2020-06-06 12:28:45 +00:00
} )
if err != nil {
2020-07-19 13:12:52 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
return
}
2020-07-09 11:30:02 +00:00
tribeIDsByServer := make ( map [ string ] [ ] int )
langTags := [ ] shared_models . LanguageTag { }
2020-07-19 13:03:53 +00:00
for _ , observation := range observations {
2020-07-09 11:30:02 +00:00
tribeIDsByServer [ observation . Server ] = append ( tribeIDsByServer [ observation . Server ] , observation . TribeID )
currentLangTag := utils . LanguageTagFromWorldName ( observation . Server )
unique := true
for _ , langTag := range langTags {
if langTag == currentLangTag {
unique = false
break
}
}
if unique {
langTags = append ( langTags , currentLangTag )
}
}
for server , tribeIDs := range tribeIDsByServer {
list , err := s . cfg . API . Tribes . Browse ( server , & shared_models . TribeFilter {
ID : tribeIDs ,
} )
if err != nil {
2020-07-19 13:12:52 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-09 11:30:02 +00:00
return
}
for _ , tribe := range list . Items {
2020-07-19 13:03:53 +00:00
for _ , observation := range observations {
if observation . TribeID == tribe . ID && observation . Server == server {
observation . Tribe = tribe
break
}
}
2020-07-09 11:30:02 +00:00
}
}
langVersionList , err := s . cfg . API . LangVersions . Browse ( & shared_models . LangVersionFilter {
Tag : langTags ,
} )
2020-06-26 18:30:25 +00:00
2020-07-09 11:30:02 +00:00
msg := & EmbedMessage { }
2020-07-21 12:01:08 +00:00
if len ( observations ) <= 0 || err != nil || langVersionList == nil || langVersionList . Items == nil {
2020-07-21 09:51:58 +00:00
msg . Append ( "-" )
2020-07-19 13:03:53 +00:00
} else {
for i , observation := range observations {
tag := "Unknown"
if observation . Tribe != nil {
tag = observation . Tribe . Tag
}
lv := utils . FindLangVersionByTag ( langVersionList . Items , utils . LanguageTagFromWorldName ( observation . Server ) )
tribeURL := ""
if lv != nil {
tribeURL = utils . FormatTribeURL ( observation . Server , lv . Host , observation . TribeID )
}
msg . Append ( fmt . Sprintf ( "**%d** | %d - %s - [``%s``](%s)\n" , i + 1 , observation . ID ,
observation . Server ,
tag ,
tribeURL ) )
2020-07-09 11:30:02 +00:00
}
2020-06-06 12:28:45 +00:00
}
s . SendEmbed ( m . ChannelID , NewEmbed ( ) .
2020-07-19 13:12:52 +00:00
SetTitle ( ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "observations.title" ,
DefaultMessage : message . FallbackMsg ( "observations.title" ,
"Observed tribes\nIndex | ID - Server - Tribe" ) ,
} ) ) .
2020-07-09 11:30:02 +00:00
SetFields ( msg . ToMessageEmbedFields ( ) ) .
2020-06-06 12:28:45 +00:00
MessageEmbed )
}
2020-07-15 09:51:49 +00:00
2020-07-19 13:28:25 +00:00
func ( s * Session ) handleShowEnnobledBarbariansCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-07-15 09:51:49 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:28:25 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "help.showennobledbarbs" ,
DefaultMessage : message . FallbackMsg ( "help.showennobledbarbs" ,
"**{{.Command}}** [group id from {{.GroupsCommand}}] - enables/disables notifications about ennobling barbarian villages." ) ,
TemplateData : map [ string ] interface { } {
"Command" : ShowEnnobledBarbariansCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
2020-07-15 09:51:49 +00:00
return
}
groupID , err := strconv . Atoi ( args [ 0 ] )
2020-07-19 13:28:25 +00:00
if err != nil || groupID <= 0 {
2020-07-15 09:51:49 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 13:28:25 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "showEnnobledBarbs.invalidGroupID" ,
DefaultMessage : message . FallbackMsg ( "showEnnobledBarbs.invalidGroupID" ,
"{{.Mention}} The group ID must be a number greater than 0." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-15 09:51:49 +00:00
return
}
group , err := s . cfg . GroupRepository . GetByID ( context . Background ( ) , groupID )
if err != nil || group . ServerID != m . GuildID {
2020-07-19 13:28:25 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-21 12:01:08 +00:00
MessageID : "showEnnobledBarbs.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "showEnnobledBarbs.groupNotFound" , "{{.Mention}} Group not found." ) ,
2020-07-19 13:28:25 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-15 09:51:49 +00:00
return
}
oldValue := group . ShowEnnobledBarbarians
group . ShowEnnobledBarbarians = ! oldValue
if err := s . cfg . GroupRepository . Update ( context . Background ( ) , group ) ; err != nil {
2020-07-19 13:28:25 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-15 09:51:49 +00:00
return
}
if oldValue {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:28:25 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "showEnnobledBarbs.success_1" ,
DefaultMessage : message . FallbackMsg ( "showEnnobledBarbs.success_1" ,
"{{.Mention}} Notifications about conquered barbarian villages will no longer show up." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-15 09:51:49 +00:00
} else {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:28:25 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "showEnnobledBarbs.success_2" ,
DefaultMessage : message . FallbackMsg ( "showEnnobledBarbs.success_2" ,
"{{.Mention}} Enabled notifications about conquered barbarian villages." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-15 09:51:49 +00:00
}
}
2020-07-19 15:21:44 +00:00
func ( s * Session ) handleChangeLanguageCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "help.changelanguage" ,
DefaultMessage : message . FallbackMsg ( "help.changelanguage" ,
2020-09-03 13:13:49 +00:00
"**{{.Command}}** [{{.Languages}}] - changes language." ) ,
2020-07-19 15:21:44 +00:00
TemplateData : map [ string ] interface { } {
"Command" : ChangeLanguageCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
"Languages" : getAvailableLanguages ( ) ,
} ,
} ) )
return
}
lang := args [ 0 ]
valid := false
for _ , langTag := range message . LanguageTags ( ) {
if langTag . String ( ) == lang {
valid = true
break
}
}
if ! valid {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "changeLanguage.languageNotSupported" ,
DefaultMessage : message . FallbackMsg ( "changeLanguage.languageNotSupported" ,
"{{.Mention}} Language not supported." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
ctx . server . Lang = lang
if err := s . cfg . ServerRepository . Update ( context . Background ( ) , ctx . server ) ; err != nil {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "changeLanguage.success" ,
DefaultMessage : message . FallbackMsg ( "changeLanguage.success" ,
"{{.Mention}} The language has been changed." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-07-21 12:01:08 +00:00
}
2020-08-09 15:20:23 +00:00
2020-07-27 15:54:51 +00:00
func ( s * Session ) handleShowInternalsCommand ( ctx commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-07-21 12:01:08 +00:00
if has , err := s . memberHasPermission ( m . GuildID , m . Author . ID , discordgo . PermissionAdministrator ) ; err != nil || ! has {
return
}
argsLength := len ( args )
if argsLength > 1 {
s . sendUnknownCommandError ( m . Author . Mention ( ) , m . ChannelID , args [ 1 : argsLength ] ... )
return
} else if argsLength < 1 {
s . SendMessage ( m . ChannelID ,
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-07-27 15:54:51 +00:00
MessageID : "help.showinternals" ,
DefaultMessage : message . FallbackMsg ( "help.showinternals" ,
2020-08-08 12:02:32 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - enables/disables notifications about in-group/in-tribe conquering." ) ,
2020-07-21 12:01:08 +00:00
TemplateData : map [ string ] interface { } {
2020-07-27 15:54:51 +00:00
"Command" : ShowInternalsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
2020-07-21 12:01:08 +00:00
"GroupsCommand" : GroupsCommand . WithPrefix ( s . cfg . CommandPrefix ) ,
} ,
} ) )
return
}
groupID , err := strconv . Atoi ( args [ 0 ] )
if err != nil || groupID <= 0 {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-08-08 12:02:32 +00:00
MessageID : "showInternals.invalidGroupID" ,
DefaultMessage : message . FallbackMsg ( "showInternals.invalidGroupID" ,
2020-07-21 12:01:08 +00:00
"{{.Mention}} The group ID must be a number greater than 0." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
group , err := s . cfg . GroupRepository . GetByID ( context . Background ( ) , groupID )
if err != nil || group . ServerID != m . GuildID {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-08-08 12:02:32 +00:00
MessageID : "showInternals.groupNotFound" ,
DefaultMessage : message . FallbackMsg ( "showInternals.groupNotFound" , "{{.Mention}} Group not found." ) ,
2020-07-21 12:01:08 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
2020-07-27 15:54:51 +00:00
oldValue := group . ShowInternals
group . ShowInternals = ! oldValue
2020-07-21 12:01:08 +00:00
if err := s . cfg . GroupRepository . Update ( context . Background ( ) , group ) ; err != nil {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
MessageID : "internalServerError" ,
DefaultMessage : message . FallbackMsg ( "internalServerError" ,
"{{.Mention}} Internal server error occurred, please try again later." ) ,
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
if oldValue {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-08-08 12:02:32 +00:00
MessageID : "showInternals.success_1" ,
DefaultMessage : message . FallbackMsg ( "showInternals.success_1" ,
"{{.Mention}} Notifications about internals will no longer show up." ) ,
2020-07-21 12:01:08 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
} else {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-08-08 12:02:32 +00:00
MessageID : "showInternals.success_2" ,
DefaultMessage : message . FallbackMsg ( "showInternals.success_2" ,
"{{.Mention}} Enabled notifications about internals." ) ,
2020-07-21 12:01:08 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
}
2020-07-19 15:21:44 +00:00
}