2020-05-30 08:35:45 +00:00
package discord
2020-06-06 12:28:45 +00:00
import (
"context"
"fmt"
2021-05-06 12:42:37 +00:00
"github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/tribalwarshelp/shared/tw/twurlbuilder"
2020-06-06 12:28:45 +00:00
"strconv"
2021-01-08 19:15:11 +00:00
"strings"
2020-06-06 12:28:45 +00:00
2021-01-08 19:15:11 +00:00
"github.com/tribalwarshelp/golang-sdk/sdk"
2020-10-24 18:38:11 +00:00
2020-06-06 12:28:45 +00:00
"github.com/bwmarrin/discordgo"
2020-07-19 11:40:53 +00:00
"github.com/nicksnyder/go-i18n/v2/i18n"
2021-05-06 12:42:37 +00:00
2020-07-19 11:40:53 +00:00
"github.com/tribalwarshelp/dcbot/message"
2020-06-06 12:28:45 +00:00
"github.com/tribalwarshelp/dcbot/models"
2021-05-06 13:25:09 +00:00
"github.com/tribalwarshelp/dcbot/tw/twutil"
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-10-17 08:27:58 +00:00
func ( s * Session ) handleAddGroupCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
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-10-15 03:18:25 +00:00
MessageID : message . AddGroupGroupLimitHasBeenReached ,
DefaultMessage : message . FallbackMsg ( message . AddGroupGroupLimitHasBeenReached ,
2020-07-19 13:03:53 +00:00
"{{.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-10-14 04:06:15 +00:00
MessageID : message . InternalServerError ,
DefaultMessage : message . FallbackMsg ( message . InternalServerError ,
2020-10-27 07:27:35 +00:00
"{{.Mention}} An internal server error has 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-10-15 03:18:25 +00:00
MessageID : message . AddGroupSuccess ,
DefaultMessage : message . FallbackMsg ( message . AddGroupSuccess ,
2020-07-19 13:03:53 +00:00
"{{.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-10-17 08:27:58 +00:00
func ( s * Session ) handleDeleteGroupCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 11:50:01 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:22:34 +00:00
MessageID : message . HelpDeleteGroup ,
DefaultMessage : message . FallbackMsg ( message . HelpDeleteGroup ,
2020-07-19 13:03:53 +00:00
"**{{.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-10-15 03:22:34 +00:00
MessageID : message . DeleteGroupInvalidID ,
DefaultMessage : message . FallbackMsg ( message . DeleteGroupInvalidID ,
2020-07-19 13:03:53 +00:00
"{{.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-10-15 03:22:34 +00:00
MessageID : message . DeleteGroupSuccess ,
DefaultMessage : message . FallbackMsg ( message . DeleteGroupSuccess ,
2020-07-19 13:03:53 +00:00
"{{.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-10-17 08:27:58 +00:00
func ( s * Session ) handleGroupsCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
groups , _ , err := s . cfg . GroupRepository . Fetch ( context . Background ( ) , & models . GroupFilter {
ServerID : [ ] string { m . GuildID } ,
2020-10-17 10:43:27 +00:00
DefaultFilter : models . DefaultFilter {
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 {
2020-10-15 03:34:13 +00:00
MessageID : message . GroupsNoGroupsAdded ,
DefaultMessage : message . FallbackMsg ( message . GroupsNoGroupsAdded ,
2021-01-08 19:15:11 +00:00
"No records to display." ) ,
2020-07-19 12:22:41 +00:00
} )
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 {
2020-10-15 03:34:13 +00:00
MessageID : message . GroupsTitle ,
DefaultMessage : message . FallbackMsg ( message . GroupsTitle , "Group list" ) ,
2020-07-19 12:22:41 +00:00
} ) ) .
2020-08-08 12:02:32 +00:00
AddField ( ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:34:13 +00:00
MessageID : message . GroupsFieldTitle ,
DefaultMessage : message . FallbackMsg ( message . GroupsFieldTitle , "Index | ID | Conquer | Loss | Barbarian | Internal" ) ,
2020-08-08 12:02:32 +00:00
} ) , msg ) .
2020-06-26 18:30:25 +00:00
MessageEmbed )
}
2020-10-17 08:27:58 +00:00
func ( s * Session ) handleConqueredVillagesCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:34:13 +00:00
MessageID : message . HelpConqueredVillages ,
DefaultMessage : message . FallbackMsg ( message . HelpConqueredVillages ,
2021-05-06 13:50:21 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - sets the channel on which notifications about conquered village will be displayed. **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-10-15 03:37:56 +00:00
MessageID : message . ConqueredVillagesInvalidID ,
DefaultMessage : message . FallbackMsg ( message . ConqueredVillagesInvalidID ,
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-10-15 03:37:56 +00:00
MessageID : message . ConqueredVillagesGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . ConqueredVillagesGroupNotFound ,
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
}
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-10-15 03:37:56 +00:00
MessageID : message . ConqueredVillagesSuccess ,
DefaultMessage : message . FallbackMsg ( message . ConqueredVillagesSuccess ,
2021-05-06 13:50:21 +00:00
"{{.Mention}} The channel has been successfully set." ) ,
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-10-17 08:27:58 +00:00
func ( s * Session ) handleDisableConqueredVillagesCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:37:56 +00:00
MessageID : message . HelpDisableConqueredVillages ,
DefaultMessage : message . FallbackMsg ( message . HelpDisableConqueredVillages ,
2020-10-15 03:46:09 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - disables 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-10-15 03:41:51 +00:00
MessageID : message . DisableConqueredVillagesInvalidID ,
DefaultMessage : message . FallbackMsg ( message . DisableConqueredVillagesInvalidID ,
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-10-15 03:41:51 +00:00
MessageID : message . DisableConqueredVillagesGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . DisableConqueredVillagesGroupNotFound ,
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-10-15 03:41:51 +00:00
MessageID : message . DisableConqueredVillagesSuccess ,
DefaultMessage : message . FallbackMsg ( message . DisableConqueredVillagesSuccess ,
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-10-17 08:27:58 +00:00
func ( s * Session ) handleLostVillagesCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:41:51 +00:00
MessageID : message . HelpLostVillages ,
DefaultMessage : message . FallbackMsg ( message . HelpLostVillages ,
2021-05-06 13:50:21 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] sets the channel on which notifications about lost village will be displayed. **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-10-15 03:41:51 +00:00
MessageID : message . LostVillagesInvalidID ,
DefaultMessage : message . FallbackMsg ( message . LostVillagesInvalidID ,
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-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 {
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:41:51 +00:00
MessageID : message . LostVillagesGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . LostVillagesGroupNotFound ,
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
}
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-10-15 03:41:51 +00:00
MessageID : message . LostVillagesSuccess ,
DefaultMessage : message . FallbackMsg ( message . LostVillagesSuccess ,
2021-05-06 13:50:21 +00:00
"{{.Mention}} The channel has been successfully set." ) ,
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-10-17 08:27:58 +00:00
func ( s * Session ) handleDisableLostVillagesCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 12:22:41 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:46:09 +00:00
MessageID : message . HelpDisableLostVillages ,
DefaultMessage : message . FallbackMsg ( message . HelpDisableLostVillages ,
"**{{.Command}}** [group id from {{.GroupsCommand}}] - disables 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-10-15 03:46:09 +00:00
MessageID : message . DisableLostVillagesInvalidID ,
DefaultMessage : message . FallbackMsg ( message . DisableLostVillagesInvalidID ,
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-10-15 03:46:09 +00:00
MessageID : message . DisableLostVillagesGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . DisableLostVillagesGroupNotFound ,
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-10-15 03:46:09 +00:00
MessageID : message . DisableLostVillagesSuccess ,
DefaultMessage : message . FallbackMsg ( message . DisableLostVillagesSuccess ,
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-10-17 08:27:58 +00:00
func ( s * Session ) handleObserveCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
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-10-15 03:52:14 +00:00
MessageID : message . HelpObserve ,
DefaultMessage : message . FallbackMsg ( message . HelpObserve ,
2021-01-08 19:15:11 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] [server] [tribe id or tribe tag] - 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-10-15 03:52:14 +00:00
MessageID : message . ObserveInvalidGroupID ,
DefaultMessage : message . FallbackMsg ( message . ObserveInvalidGroupID ,
2020-07-19 13:03:53 +00:00
"{{.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 ]
2021-01-08 19:15:11 +00:00
tribeTag := strings . TrimSpace ( args [ 2 ] )
tribeID , err := strconv . Atoi ( tribeTag )
if ( err != nil || tribeID <= 0 ) && tribeTag == "" {
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-10-15 03:52:14 +00:00
MessageID : message . ObserveInvalidTribeID ,
DefaultMessage : message . FallbackMsg ( message . ObserveInvalidTribeID ,
2021-01-08 19:15:11 +00:00
"{{.Mention}} The third parameter must be a number greater than 0 or a valid string." ) ,
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-11-06 19:37:49 +00:00
server , err := s . cfg . API . Server . 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 {
2020-10-15 03:52:14 +00:00
MessageID : message . ObserveServerNotFound ,
DefaultMessage : message . FallbackMsg ( message . ObserveServerNotFound , "{{.Mention}} Server not found." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-07 15:49:33 +00:00
return
}
2021-05-06 12:42:37 +00:00
if server . Status == twmodel . ServerStatusClosed {
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:52:14 +00:00
MessageID : message . ObserveServerIsClosed ,
DefaultMessage : message . FallbackMsg ( message . ObserveServerIsClosed , "{{.Mention}} Server is closed." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-07 15:49:33 +00:00
return
}
2021-05-06 12:42:37 +00:00
var tribe * twmodel . Tribe
2021-01-08 19:15:11 +00:00
if tribeID > 0 {
tribe , err = s . cfg . API . Tribe . Read ( server . Key , tribeID )
} else {
list := & sdk . TribeList { }
2021-05-06 12:42:37 +00:00
list , err = s . cfg . API . Tribe . Browse ( server . Key , 1 , 0 , [ ] string { } , & twmodel . TribeFilter {
2021-01-08 19:15:11 +00:00
Tag : [ ] string { tribeTag } ,
} )
if list != nil && list . Items != nil && len ( list . Items ) > 0 {
tribe = list . Items [ 0 ]
}
}
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 {
2020-10-15 03:52:14 +00:00
MessageID : message . ObserveTribeNotFound ,
DefaultMessage : message . FallbackMsg ( message . ObserveTribeNotFound , "{{.Mention}} Tribe not found." ) ,
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
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 {
2020-10-15 03:52:14 +00:00
MessageID : message . ObserveGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . ObserveGroupNotFound , "{{.Mention}} Group not found." ) ,
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 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-10-15 03:52:14 +00:00
MessageID : message . ObserveLimitHasBeenReached ,
DefaultMessage : message . FallbackMsg ( message . ObserveLimitHasBeenReached ,
2020-07-19 13:03:53 +00:00
"{{.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
}
2021-01-08 19:15:11 +00:00
go s . cfg . ObservationRepository . Store ( context . Background ( ) , & models . Observation {
2020-06-26 18:30:25 +00:00
Server : server . Key ,
2021-01-08 19:15:11 +00:00
TribeID : tribe . ID ,
2020-06-26 18:30:25 +00:00
GroupID : groupID ,
2020-06-06 12:28:45 +00:00
} )
2020-07-19 12:47:34 +00:00
s . SendMessage ( m . ChannelID , ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:52:14 +00:00
MessageID : message . ObserveSuccess ,
2021-05-06 13:50:21 +00:00
DefaultMessage : message . FallbackMsg ( message . ObserveSuccess , "{{.Mention}} The tribe has been added to the group." ) ,
2020-07-19 12:47:34 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
}
2020-10-17 08:27:58 +00:00
func ( s * Session ) handleDeleteObservationCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-06 12:28:45 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
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-10-15 03:58:03 +00:00
MessageID : message . HelpDeleteObservation ,
DefaultMessage : message . FallbackMsg ( message . HelpDeleteObservation ,
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-10-15 03:58:03 +00:00
MessageID : message . DeleteObservationInvalidGroupID ,
DefaultMessage : message . FallbackMsg ( message . DeleteObservationInvalidGroupID ,
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-10-15 03:58:03 +00:00
MessageID : message . DeleteObservationInvalidTribeID ,
DefaultMessage : message . FallbackMsg ( message . DeleteObservationInvalidTribeID ,
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-10-15 03:58:03 +00:00
MessageID : message . DeleteObservationGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . DeleteObservationGroupNotFound , "{{.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 {
2020-10-15 03:58:03 +00:00
MessageID : message . DeleteObservationSuccess ,
2021-05-06 13:50:21 +00:00
DefaultMessage : message . FallbackMsg ( message . DeleteObservationSuccess , "{{.Mention}} The tribe has been removed from the group." ) ,
2020-07-19 13:03:53 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
2020-06-06 12:28:45 +00:00
}
2020-10-17 08:27:58 +00:00
func ( s * Session ) handleObservationsCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-06-26 18:30:25 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-06-26 18:30:25 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 13:12:52 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-15 03:58:03 +00:00
MessageID : message . HelpObservations ,
DefaultMessage : message . FallbackMsg ( message . HelpObservations ,
2020-10-17 05:58:10 +00:00
"**{{.Command}}** [group id from {{.GroupsCommand}}] - shows a list of monitored tribes added to 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 {
2020-10-17 05:58:10 +00:00
MessageID : message . ObservationsInvalidGroupID ,
DefaultMessage : message . FallbackMsg ( message . ObservationsInvalidGroupID ,
2020-07-19 13:12:52 +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
}
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 {
2020-10-17 05:58:10 +00:00
MessageID : message . ObservationsGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . ObservationsGroupNotFound , "{{.Mention}} Group not found." ) ,
2020-07-19 13:12:52 +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
observations , _ , err := s . cfg . ObservationRepository . Fetch ( context . Background ( ) , & models . ObservationFilter {
2020-06-26 18:30:25 +00:00
GroupID : [ ] int { groupID } ,
2020-10-17 10:43:27 +00:00
DefaultFilter : models . DefaultFilter {
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 {
2020-10-14 04:06:15 +00:00
MessageID : message . InternalServerError ,
DefaultMessage : message . FallbackMsg ( message . InternalServerError ,
2020-10-27 07:27:35 +00:00
"{{.Mention}} An internal server error has occurred, please try again later." ) ,
2020-07-19 13:12:52 +00:00
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 )
2021-05-06 12:42:37 +00:00
versionCodes := [ ] twmodel . VersionCode { }
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 )
2021-05-06 12:42:37 +00:00
currentCode := twmodel . VersionCodeFromServerKey ( observation . Server )
2020-07-09 11:30:02 +00:00
unique := true
2020-11-06 19:58:51 +00:00
for _ , code := range versionCodes {
if code == currentCode {
2020-07-09 11:30:02 +00:00
unique = false
break
}
}
if unique {
2020-11-06 19:58:51 +00:00
versionCodes = append ( versionCodes , currentCode )
2020-07-09 11:30:02 +00:00
}
}
for server , tribeIDs := range tribeIDsByServer {
2021-05-06 12:42:37 +00:00
list , err := s . cfg . API . Tribe . Browse ( server , 0 , 0 , [ ] string { } , & twmodel . TribeFilter {
2020-07-09 11:30:02 +00:00
ID : tribeIDs ,
} )
if err != nil {
2020-07-19 13:12:52 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-14 04:06:15 +00:00
MessageID : message . InternalServerError ,
DefaultMessage : message . FallbackMsg ( message . InternalServerError ,
2020-10-27 07:27:35 +00:00
"{{.Mention}} An internal server error has occurred, please try again later." ) ,
2020-07-19 13:12:52 +00:00
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
}
}
2021-05-06 12:42:37 +00:00
versionList , err := s . cfg . API . Version . Browse ( 0 , 0 , [ ] string { } , & twmodel . VersionFilter {
2020-11-06 19:37:49 +00:00
Code : versionCodes ,
2020-07-09 11:30:02 +00:00
} )
2020-06-26 18:30:25 +00:00
2020-10-17 06:47:39 +00:00
msg := & MessageEmbed { }
2020-11-06 19:37:49 +00:00
if len ( observations ) <= 0 || err != nil || versionList == nil || versionList . 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
}
2021-05-06 13:25:09 +00:00
version := twutil . FindVersionByCode ( versionList . Items , twmodel . VersionCodeFromServerKey ( observation . Server ) )
2020-07-19 13:03:53 +00:00
tribeURL := ""
2021-01-08 19:15:11 +00:00
if version != nil {
2021-05-06 12:42:37 +00:00
tribeURL = twurlbuilder . BuildTribeURL ( observation . Server , version . Host , observation . TribeID )
2020-07-19 13:03:53 +00:00
}
2021-02-06 09:36:13 +00:00
msg . Append ( fmt . Sprintf ( "**%d** | %d - %s - %s\n" , i + 1 , observation . ID ,
2020-07-19 13:03:53 +00:00
observation . Server ,
2021-02-06 09:36:13 +00:00
BuildLink ( 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 {
2020-10-17 05:58:10 +00:00
MessageID : message . ObservationsTitle ,
DefaultMessage : message . FallbackMsg ( message . ObservationsTitle ,
2021-01-08 19:15:11 +00:00
"Observed tribes\nIndex | ID - Server - Tribe" ) ,
2020-07-19 13:12:52 +00:00
} ) ) .
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-10-17 08:27:58 +00:00
func ( s * Session ) handleShowEnnobledBarbariansCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-07-15 09:51:49 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-07-15 09:51:49 +00:00
s . SendMessage ( m . ChannelID ,
2020-07-19 13:28:25 +00:00
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . HelpShowEnnobledBarbs ,
DefaultMessage : message . FallbackMsg ( message . HelpShowEnnobledBarbs ,
2020-07-19 13:28:25 +00:00
"**{{.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 {
2020-10-17 05:58:10 +00:00
MessageID : message . ShowEnnobledBarbsInvalidGroupID ,
DefaultMessage : message . FallbackMsg ( message . ShowEnnobledBarbsInvalidGroupID ,
2020-07-19 13:28:25 +00:00
"{{.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-10-17 05:58:10 +00:00
MessageID : message . ShowEnnobledBarbsGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . ShowEnnobledBarbsGroupNotFound , "{{.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 {
2020-10-14 04:06:15 +00:00
MessageID : message . InternalServerError ,
DefaultMessage : message . FallbackMsg ( message . InternalServerError ,
2020-10-27 07:27:35 +00:00
"{{.Mention}} An internal server error has occurred, please try again later." ) ,
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
}
if oldValue {
s . SendMessage ( m . ChannelID ,
2020-07-19 13:28:25 +00:00
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . ShowEnnobledBarbsSuccess1 ,
DefaultMessage : message . FallbackMsg ( message . ShowEnnobledBarbsSuccess1 ,
2020-07-19 13:28:25 +00:00
"{{.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 {
2020-10-17 05:58:10 +00:00
MessageID : message . ShowEnnobledBarbsSuccess2 ,
DefaultMessage : message . FallbackMsg ( message . ShowEnnobledBarbsSuccess2 ,
2020-07-19 13:28:25 +00:00
"{{.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
2020-10-17 08:27:58 +00:00
func ( s * Session ) handleChangeLanguageCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-07-19 15:21:44 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-07-19 15:21:44 +00:00
s . SendMessage ( m . ChannelID ,
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . HelpChangageLanguage ,
DefaultMessage : message . FallbackMsg ( message . HelpChangageLanguage ,
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 ]
2020-10-17 05:58:10 +00:00
valid := isValidLanguageTag ( lang )
2020-07-19 15:21:44 +00:00
if ! valid {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . ChangeLanguageLanguageNotSupported ,
DefaultMessage : message . FallbackMsg ( message . ChangeLanguageLanguageNotSupported ,
2020-07-19 15:21:44 +00:00
"{{.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 {
2020-10-14 04:06:15 +00:00
MessageID : message . InternalServerError ,
DefaultMessage : message . FallbackMsg ( message . InternalServerError ,
2020-10-27 07:27:35 +00:00
"{{.Mention}} An internal server error has occurred, please try again later." ) ,
2020-07-19 15:21:44 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
2020-10-17 08:27:58 +00:00
ctx . localizer = message . NewLocalizer ( lang )
2020-07-19 15:21:44 +00:00
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . ChangeLanguageSuccess ,
DefaultMessage : message . FallbackMsg ( message . ChangeLanguageSuccess ,
2020-07-19 15:21:44 +00:00
"{{.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-10-17 08:27:58 +00:00
func ( s * Session ) handleShowInternalsCommand ( ctx * commandCtx , m * discordgo . MessageCreate , args ... string ) {
2020-07-21 12:01:08 +00:00
argsLength := len ( args )
2020-10-17 08:27:58 +00:00
if argsLength != 1 {
2020-07-21 12:01:08 +00:00
s . SendMessage ( m . ChannelID ,
m . Author . Mention ( ) + " " + ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . HelpShowInternals ,
DefaultMessage : message . FallbackMsg ( message . HelpShowInternals ,
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-10-17 05:58:10 +00:00
MessageID : message . ShowInternalsInvalidGroupID ,
DefaultMessage : message . FallbackMsg ( message . ShowInternalsInvalidGroupID ,
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-10-17 05:58:10 +00:00
MessageID : message . ShowInternalsGroupNotFound ,
DefaultMessage : message . FallbackMsg ( message . ShowInternalsGroupNotFound , "{{.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 {
2020-10-14 04:06:15 +00:00
MessageID : message . InternalServerError ,
DefaultMessage : message . FallbackMsg ( message . InternalServerError ,
2020-10-27 07:27:35 +00:00
"{{.Mention}} An internal server error has occurred, please try again later." ) ,
2020-07-21 12:01:08 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
return
}
if oldValue {
s . SendMessage ( m . ChannelID ,
ctx . localizer . MustLocalize ( & i18n . LocalizeConfig {
2020-10-17 05:58:10 +00:00
MessageID : message . ShowInternalsSuccess1 ,
DefaultMessage : message . FallbackMsg ( message . ShowInternalsSuccess1 ,
2020-08-08 12:02:32 +00:00
"{{.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-10-17 05:58:10 +00:00
MessageID : message . ShowInternalsSuccess2 ,
DefaultMessage : message . FallbackMsg ( message . ShowInternalsSuccess2 ,
2021-05-06 13:50:21 +00:00
"{{.Mention}} Notifications about internals have been enabled." ) ,
2020-07-21 12:01:08 +00:00
TemplateData : map [ string ] interface { } {
"Mention" : m . Author . Mention ( ) ,
} ,
} ) )
}
2020-07-19 15:21:44 +00:00
}