From ce3e50725b00f900f88b6e31d663695c307620f5 Mon Sep 17 00:00:00 2001 From: Dot-Rar Date: Sat, 4 Apr 2020 17:52:43 +0100 Subject: [PATCH] port to be compatible with GDL bot --- app/http/endpoints/manage/blacklist.go | 4 +- app/http/endpoints/manage/blacklistremove.go | 4 +- app/http/endpoints/manage/logs.go | 6 +- app/http/endpoints/manage/panelcreate.go | 12 +-- app/http/endpoints/manage/paneldelete.go | 4 +- app/http/endpoints/manage/panels.go | 10 +- app/http/endpoints/manage/sendmessage.go | 2 +- app/http/endpoints/manage/settings.go | 2 +- app/http/endpoints/manage/ticketclose.go | 2 +- app/http/endpoints/manage/ticketlist.go | 10 +- app/http/endpoints/manage/ticketview.go | 6 +- app/http/endpoints/manage/updatesettings.go | 8 +- app/http/endpoints/manage/viewlog.go | 2 +- app/http/endpoints/manage/webchatws.go | 6 +- app/http/endpoints/root/callback.go | 6 +- app/http/endpoints/root/index.go | 2 +- cache/ticketclose.go | 4 +- database/table/archivechannel.go | 8 +- database/table/blacklist.go | 74 ++++++------- database/table/channelcategory.go | 50 ++++----- database/table/channels.go | 14 +-- database/table/namingscheme.go | 6 +- database/table/panels.go | 17 ++- database/table/panelsettings.go | 24 ++--- database/table/permissions.go | 88 +++++++-------- database/table/pingeveryone.go | 74 ++++++------- database/table/prefix.go | 50 ++++----- database/table/premiumguilds.go | 26 ++--- database/table/rolepermissions.go | 97 +++-------------- database/table/rolescache.go | 16 +-- database/table/ticketarchive.go | 100 +++++++++--------- database/table/ticketlimit.go | 50 ++++----- database/table/tickets.go | 84 +++++++-------- database/table/username.go | 68 ++++++------ database/table/userscanclose.go | 54 +++++----- database/table/votes.go | 44 ++++---- database/table/welcomemessage.go | 50 ++++----- .../discord/endpoints/guild/getGuildMember.go | 5 +- utils/discord/objects/member.go | 2 +- utils/permissionutils.go | 14 +-- utils/premiumutils.go | 9 +- utils/sessionutils.go | 40 +++---- utils/types/uint64stringslice.go | 44 ++++++++ 43 files changed, 587 insertions(+), 611 deletions(-) create mode 100644 utils/types/uint64stringslice.go diff --git a/app/http/endpoints/manage/blacklist.go b/app/http/endpoints/manage/blacklist.go index df94fb1..c6c36de 100644 --- a/app/http/endpoints/manage/blacklist.go +++ b/app/http/endpoints/manage/blacklist.go @@ -27,7 +27,7 @@ func BlacklistHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -52,7 +52,7 @@ func BlacklistHandler(ctx *gin.Context) { blacklistedUsers := table.GetBlacklistNodes(guildId) - var blacklistedIds []int64 + var blacklistedIds []uint64 for _, user := range blacklistedUsers { blacklistedIds = append(blacklistedIds, user.User) } diff --git a/app/http/endpoints/manage/blacklistremove.go b/app/http/endpoints/manage/blacklistremove.go index 6332774..12aa4df 100644 --- a/app/http/endpoints/manage/blacklistremove.go +++ b/app/http/endpoints/manage/blacklistremove.go @@ -28,7 +28,7 @@ func BlacklistRemoveHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -53,7 +53,7 @@ func BlacklistRemoveHandler(ctx *gin.Context) { if ctx.Query("c") == store.Get("csrf").(string) { targetIdStr := ctx.Param("user") - targetId, err := strconv.ParseInt(targetIdStr, 10, 64) + targetId, err := strconv.ParseUint(targetIdStr, 10, 64) if err == nil { // If it's a real ID table.RemoveBlacklist(guildId, targetId) diff --git a/app/http/endpoints/manage/logs.go b/app/http/endpoints/manage/logs.go index 468b021..89b4588 100644 --- a/app/http/endpoints/manage/logs.go +++ b/app/http/endpoints/manage/logs.go @@ -27,7 +27,7 @@ func LogsHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -63,9 +63,9 @@ func LogsHandler(ctx *gin.Context) { // Get logs // Get user ID from URL - var filteredUserId int64 + var filteredUserId uint64 if utils.IsInt(ctx.Query("userid")) { - filteredUserId, _ = strconv.ParseInt(ctx.Query("userid"), 10, 64) + filteredUserId, _ = strconv.ParseUint(ctx.Query("userid"), 10, 64) } // Get ticket ID from URL diff --git a/app/http/endpoints/manage/panelcreate.go b/app/http/endpoints/manage/panelcreate.go index 0fb7241..e686921 100644 --- a/app/http/endpoints/manage/panelcreate.go +++ b/app/http/endpoints/manage/panelcreate.go @@ -30,7 +30,7 @@ func PanelCreateHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -62,7 +62,7 @@ func PanelCreateHandler(ctx *gin.Context) { // Get if the guild is premium premiumChan := make(chan bool) - go utils.IsPremiumGuild(store, guildIdStr, premiumChan) + go utils.IsPremiumGuild(store, guildId, premiumChan) premium := <-premiumChan // Check the user hasn't met their panel quota @@ -100,7 +100,7 @@ func PanelCreateHandler(ctx *gin.Context) { // Validate channel channelIdStr := ctx.PostForm("channel") - channelId, err := strconv.ParseInt(channelIdStr, 10, 64); if err != nil { + channelId, err := strconv.ParseUint(channelIdStr, 10, 64); if err != nil { ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validChannel=false", guildId)) return } @@ -114,7 +114,7 @@ func PanelCreateHandler(ctx *gin.Context) { // Validate category categoryStr := ctx.PostForm("categories") - categoryId, err := strconv.ParseInt(categoryStr, 10, 64); if err != nil { + categoryId, err := strconv.ParseUint(categoryStr, 10, 64); if err != nil { ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validCategory=false", guildId)) return } @@ -158,7 +158,7 @@ func PanelCreateHandler(ctx *gin.Context) { } } -func validateChannel(guildId, channelId int64, res chan bool) { +func validateChannel(guildId, channelId uint64, res chan bool) { // Get channels from DB channelsChan := make(chan []table.Channel) go table.GetCachedChannelsByGuild(guildId, channelsChan) @@ -176,7 +176,7 @@ func validateChannel(guildId, channelId int64, res chan bool) { res <- validChannel } -func validateCategory(guildId, categoryId int64, res chan bool) { +func validateCategory(guildId, categoryId uint64, res chan bool) { // Get channels from DB categoriesChan := make(chan []table.Channel) go table.GetCategories(guildId, categoriesChan) diff --git a/app/http/endpoints/manage/paneldelete.go b/app/http/endpoints/manage/paneldelete.go index 886da49..3bbc0c9 100644 --- a/app/http/endpoints/manage/paneldelete.go +++ b/app/http/endpoints/manage/paneldelete.go @@ -28,14 +28,14 @@ func PanelDeleteHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return } messageIdStr := ctx.Param("msg") - messageId, err := strconv.ParseInt(messageIdStr, 10, 64); if err != nil { + messageId, err := strconv.ParseUint(messageIdStr, 10, 64); if err != nil { ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels", guildId)) return } diff --git a/app/http/endpoints/manage/panels.go b/app/http/endpoints/manage/panels.go index 4399931..44b4ec0 100644 --- a/app/http/endpoints/manage/panels.go +++ b/app/http/endpoints/manage/panels.go @@ -11,7 +11,7 @@ import ( ) type wrappedPanel struct { - MessageId int64 + MessageId uint64 ChannelName string Title string Content string @@ -35,7 +35,7 @@ func PanelHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -101,7 +101,7 @@ func PanelHandler(ctx *gin.Context) { } // Format channels to be text channels only - channelMap := make(map[int64]string) + channelMap := make(map[uint64]string) for _, channel := range channels { if channel.Type == 0 { channelMap[channel.ChannelId] = channel.Name @@ -109,7 +109,7 @@ func PanelHandler(ctx *gin.Context) { } // Get categories & format - categories := make(map[int64]string) + categories := make(map[uint64]string) for _, channel := range channels { if channel.Type == 4 { categories[channel.ChannelId] = channel.Name @@ -118,7 +118,7 @@ func PanelHandler(ctx *gin.Context) { // Get is premium isPremiumChan := make(chan bool) - go utils.IsPremiumGuild(store, guildIdStr, isPremiumChan) + go utils.IsPremiumGuild(store, guildId, isPremiumChan) isPremium := <-isPremiumChan ctx.HTML(200, "manage/panels", gin.H{ diff --git a/app/http/endpoints/manage/sendmessage.go b/app/http/endpoints/manage/sendmessage.go index aebaa0e..1bd774d 100644 --- a/app/http/endpoints/manage/sendmessage.go +++ b/app/http/endpoints/manage/sendmessage.go @@ -30,7 +30,7 @@ func SendMessage(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return diff --git a/app/http/endpoints/manage/settings.go b/app/http/endpoints/manage/settings.go index fef63c6..fe83f34 100644 --- a/app/http/endpoints/manage/settings.go +++ b/app/http/endpoints/manage/settings.go @@ -29,7 +29,7 @@ func SettingsHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return diff --git a/app/http/endpoints/manage/ticketclose.go b/app/http/endpoints/manage/ticketclose.go index ff8cffd..60df6f6 100644 --- a/app/http/endpoints/manage/ticketclose.go +++ b/app/http/endpoints/manage/ticketclose.go @@ -29,7 +29,7 @@ func TicketCloseHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return diff --git a/app/http/endpoints/manage/ticketlist.go b/app/http/endpoints/manage/ticketlist.go index ea4d40c..86d831a 100644 --- a/app/http/endpoints/manage/ticketlist.go +++ b/app/http/endpoints/manage/ticketlist.go @@ -28,7 +28,7 @@ func TicketListHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -53,18 +53,18 @@ func TicketListHandler(ctx *gin.Context) { tickets := table.GetOpenTickets(guildId) - var toFetch []int64 + var toFetch []uint64 for _, ticket := range tickets { toFetch = append(toFetch, ticket.Owner) for _, idStr := range strings.Split(ticket.Members, ",") { - if memberId, err := strconv.ParseInt(idStr, 10, 64); err == nil { + if memberId, err := strconv.ParseUint(idStr, 10, 64); err == nil { toFetch = append(toFetch, memberId) } } } - nodes := make(map[int64]table.UsernameNode) + nodes := make(map[uint64]table.UsernameNode) for _, node := range table.GetUserNodes(toFetch) { nodes[node.Id] = node } @@ -74,7 +74,7 @@ func TicketListHandler(ctx *gin.Context) { for _, ticket := range tickets { var membersFormatted []map[string]interface{} for index, memberIdStr := range strings.Split(ticket.Members, ",") { - if memberId, err := strconv.ParseInt(memberIdStr, 10, 64); err == nil { + if memberId, err := strconv.ParseUint(memberIdStr, 10, 64); err == nil { if memberId != 0 { var separator string if index != len(strings.Split(ticket.Members, ",")) - 1 { diff --git a/app/http/endpoints/manage/ticketview.go b/app/http/endpoints/manage/ticketview.go index 57a6a81..adf7f95 100644 --- a/app/http/endpoints/manage/ticketview.go +++ b/app/http/endpoints/manage/ticketview.go @@ -33,7 +33,7 @@ func TicketViewHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -96,7 +96,7 @@ func TicketViewHandler(ctx *gin.Context) { match := MentionRegex.FindAllStringSubmatch(content, -1) for _, mention := range match { if len(mention) >= 2 { - mentionedId, err := strconv.ParseInt(mention[1], 10, 64); if err != nil { + mentionedId, err := strconv.ParseUint(mention[1], 10, 64); if err != nil { continue } @@ -113,7 +113,7 @@ func TicketViewHandler(ctx *gin.Context) { } premium := make(chan bool) - go utils.IsPremiumGuild(store, guildIdStr, premium) + go utils.IsPremiumGuild(store, guildId, premium) ctx.HTML(200, "manage/ticketview", gin.H{ "name": store.Get("name").(string), diff --git a/app/http/endpoints/manage/updatesettings.go b/app/http/endpoints/manage/updatesettings.go index 93cbcd8..6c8883d 100644 --- a/app/http/endpoints/manage/updatesettings.go +++ b/app/http/endpoints/manage/updatesettings.go @@ -28,7 +28,7 @@ func UpdateSettingsHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return @@ -108,7 +108,7 @@ func UpdateSettingsHandler(ctx *gin.Context) { categoryStr := ctx.PostForm("category") if utils.Contains(categoryIds, categoryStr) { // Error is impossible, as we check it's a valid channel already - category, _ := strconv.ParseInt(categoryStr, 10, 64) + category, _ := strconv.ParseUint(categoryStr, 10, 64) table.UpdateChannelCategory(guildId, category) } @@ -118,14 +118,14 @@ func UpdateSettingsHandler(ctx *gin.Context) { go table.GetCachedChannelsByGuild(guildId, channelsChan) channels := <-channelsChan - var channelIds []int64 + var channelIds []uint64 for _, channel := range channels { channelIds = append(channelIds, channel.ChannelId) } // Update or archive channel archiveChannelStr := ctx.PostForm("archivechannel") - archiveChannelId, err := strconv.ParseInt(archiveChannelStr, 10, 64) + archiveChannelId, err := strconv.ParseUint(archiveChannelStr, 10, 64) if err == nil && utils.Contains(channelIds, archiveChannelId) { table.UpdateArchiveChannel(guildId, archiveChannelId) } diff --git a/app/http/endpoints/manage/viewlog.go b/app/http/endpoints/manage/viewlog.go index 107cc56..6187060 100644 --- a/app/http/endpoints/manage/viewlog.go +++ b/app/http/endpoints/manage/viewlog.go @@ -31,7 +31,7 @@ func LogViewHandler(ctx *gin.Context) { // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + guildId, err := strconv.ParseUint(guildIdStr, 10, 64) if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return diff --git a/app/http/endpoints/manage/webchatws.go b/app/http/endpoints/manage/webchatws.go index 16fad4c..0a4f1ed 100644 --- a/app/http/endpoints/manage/webchatws.go +++ b/app/http/endpoints/manage/webchatws.go @@ -93,7 +93,7 @@ func WebChatWs(ctx *gin.Context) { } var guildId string - var guildIdParsed int64 + var guildIdParsed uint64 var ticket int for { @@ -119,7 +119,7 @@ func WebChatWs(ctx *gin.Context) { socket.Ticket = ticket // Verify the guild exists - guildIdParsed, err = strconv.ParseInt(guildId, 10, 64) + guildIdParsed, err = strconv.ParseUint(guildId, 10, 64) if err != nil { fmt.Println(err.Error()) conn.Close() @@ -146,7 +146,7 @@ func WebChatWs(ctx *gin.Context) { // Verify the guild is premium premium := make(chan bool) - go utils.IsPremiumGuild(store, guildId, premium) + go utils.IsPremiumGuild(store, guildIdParsed, premium) if !<-premium { conn.Close() return diff --git a/app/http/endpoints/root/callback.go b/app/http/endpoints/root/callback.go index e2d5bd8..5bb3598 100644 --- a/app/http/endpoints/root/callback.go +++ b/app/http/endpoints/root/callback.go @@ -83,7 +83,7 @@ func CallbackHandler(ctx *gin.Context) { ctx.Redirect(302, config.Conf.Server.BaseUrl) - userId, err := strconv.ParseInt(currentUser.Id, 10, 64); if err != nil { // ??? + userId, err := strconv.ParseUint(currentUser.Id, 10, 64); if err != nil { // ??? return } @@ -100,7 +100,7 @@ func CallbackHandler(ctx *gin.Context) { go cache.Client.StoreGuild(guild) // cache roles - guildId, err := strconv.ParseInt(guild.Id, 10, 64); if err != nil { + guildId, err := strconv.ParseUint(guild.Id, 10, 64); if err != nil { continue } go cacheRoles(store, guildId, userId) @@ -116,7 +116,7 @@ func CallbackHandler(ctx *gin.Context) { }() } -func cacheRoles(store sessions.Session, guildId, userId int64) { +func cacheRoles(store sessions.Session, guildId, userId uint64) { roles := utils.GetRolesRest(store, guildId, userId) if roles == nil { diff --git a/app/http/endpoints/root/index.go b/app/http/endpoints/root/index.go index fd7c535..0817cdd 100644 --- a/app/http/endpoints/root/index.go +++ b/app/http/endpoints/root/index.go @@ -28,7 +28,7 @@ func IndexHandler(ctx *gin.Context) { userGuilds := table.GetGuilds(userIdStr) adminGuilds := make([]objects.Guild, 0) for _, guild := range userGuilds { - guildId, err := strconv.ParseInt(guild.Id, 10, 64) + guildId, err := strconv.ParseUint(guild.Id, 10, 64) if err != nil { // I think this happens when a server was deleted? We should just skip though. continue } diff --git a/cache/ticketclose.go b/cache/ticketclose.go index e0287da..d04180e 100644 --- a/cache/ticketclose.go +++ b/cache/ticketclose.go @@ -7,11 +7,11 @@ import ( type TicketCloseMessage struct { Uuid string - User int64 + User uint64 Reason string } -func (c *RedisClient) PublishTicketClose(ticket string, userId int64, reason string) { +func (c *RedisClient) PublishTicketClose(ticket string, userId uint64, reason string) { settings := TicketCloseMessage{ Uuid: ticket, User: userId, diff --git a/database/table/archivechannel.go b/database/table/archivechannel.go index 65c006e..6748a9d 100644 --- a/database/table/archivechannel.go +++ b/database/table/archivechannel.go @@ -5,20 +5,20 @@ import ( ) type ArchiveChannel struct { - Guild int64 `gorm:"column:GUILDID"` - Channel int64 `gorm:"column:CHANNELID"` + Guild uint64 `gorm:"column:GUILDID"` + Channel uint64 `gorm:"column:CHANNELID"` } func (ArchiveChannel) TableName() string { return "archivechannel" } -func UpdateArchiveChannel(guildId int64, channelId int64) { +func UpdateArchiveChannel(guildId uint64, channelId uint64) { var channel ArchiveChannel database.Database.Where(ArchiveChannel{Guild: guildId}).Assign(ArchiveChannel{Channel: channelId}).FirstOrCreate(&channel) } -func GetArchiveChannel(guildId int64) int64 { +func GetArchiveChannel(guildId uint64) uint64 { var channel ArchiveChannel database.Database.Where(&ArchiveChannel{Guild: guildId}).First(&channel) diff --git a/database/table/blacklist.go b/database/table/blacklist.go index e2a7f68..d59b8c2 100644 --- a/database/table/blacklist.go +++ b/database/table/blacklist.go @@ -1,37 +1,37 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type BlacklistNode struct { - Assoc int `gorm:"column:ASSOCID;type:int;primary_key;auto_increment"` - Guild int64 `gorm:"column:GUILDID"` - User int64 `gorm:"column:USERID"` -} - -func (BlacklistNode) TableName() string { - return "blacklist" -} - -func IsBlacklisted(guildId, userId int64) bool { - var count int - database.Database.Table("blacklist").Where(&BlacklistNode{Guild: guildId, User: userId}).Count(&count) - return count > 0 -} - -func AddBlacklist(guildId, userId int64) { - database.Database.Create(&BlacklistNode{Guild: guildId, User: userId}) -} - -func RemoveBlacklist(guildId, userId int64) { - var node BlacklistNode - database.Database.Where(BlacklistNode{Guild: guildId, User: userId}).Take(&node) - database.Database.Delete(&node) -} - -func GetBlacklistNodes(guildId int64) []BlacklistNode { - var nodes []BlacklistNode - database.Database.Where(&BlacklistNode{Guild: guildId}).Find(&nodes) - return nodes -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type BlacklistNode struct { + Assoc int `gorm:"column:ASSOCID;type:int;primary_key;auto_increment"` + Guild uint64 `gorm:"column:GUILDID"` + User uint64 `gorm:"column:USERID"` +} + +func (BlacklistNode) TableName() string { + return "blacklist" +} + +func IsBlacklisted(guildId, userId uint64) bool { + var count int + database.Database.Table("blacklist").Where(&BlacklistNode{Guild: guildId, User: userId}).Count(&count) + return count > 0 +} + +func AddBlacklist(guildId, userId uint64) { + database.Database.Create(&BlacklistNode{Guild: guildId, User: userId}) +} + +func RemoveBlacklist(guildId, userId uint64) { + var node BlacklistNode + database.Database.Where(BlacklistNode{Guild: guildId, User: userId}).Take(&node) + database.Database.Delete(&node) +} + +func GetBlacklistNodes(guildId uint64) []BlacklistNode { + var nodes []BlacklistNode + database.Database.Where(&BlacklistNode{Guild: guildId}).Find(&nodes) + return nodes +} diff --git a/database/table/channelcategory.go b/database/table/channelcategory.go index d4fab7b..40bd9de 100644 --- a/database/table/channelcategory.go +++ b/database/table/channelcategory.go @@ -1,25 +1,25 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type ChannelCategory struct { - GuildId int64 `gorm:"column:GUILDID"` - Category int64 `gorm:"column:CATEGORYID"` -} - -func (ChannelCategory) TableName() string { - return "channelcategory" -} - -func UpdateChannelCategory(guildId int64, categoryId int64) { - database.Database.Where(&ChannelCategory{GuildId: guildId}).Assign(&ChannelCategory{Category: categoryId}).FirstOrCreate(&ChannelCategory{}) -} - -func GetChannelCategory(guildId int64) int64 { - var category ChannelCategory - database.Database.Where(&ChannelCategory{GuildId: guildId}).First(&category) - - return category.Category -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type ChannelCategory struct { + GuildId uint64 `gorm:"column:GUILDID"` + Category uint64 `gorm:"column:CATEGORYID"` +} + +func (ChannelCategory) TableName() string { + return "channelcategory" +} + +func UpdateChannelCategory(guildId uint64, categoryId uint64) { + database.Database.Where(&ChannelCategory{GuildId: guildId}).Assign(&ChannelCategory{Category: categoryId}).FirstOrCreate(&ChannelCategory{}) +} + +func GetChannelCategory(guildId uint64) uint64 { + var category ChannelCategory + database.Database.Where(&ChannelCategory{GuildId: guildId}).First(&category) + + return category.Category +} diff --git a/database/table/channels.go b/database/table/channels.go index 32a0b71..b4db35d 100644 --- a/database/table/channels.go +++ b/database/table/channels.go @@ -5,8 +5,8 @@ import ( ) type Channel struct { - ChannelId int64 `gorm:"column:CHANNELID"` - GuildId int64 `gorm:"column:GUILDID"` + ChannelId uint64 `gorm:"column:CHANNELID"` + GuildId uint64 `gorm:"column:GUILDID"` Name string `gorm:"column:NAME;type:VARCHAR(32)"` Type int `gorm:"column:CHANNELTYPE;type:TINYINT(1)"` } @@ -15,7 +15,7 @@ func (Channel) TableName() string { return "Channel" } -func StoreChannel(channelId, guildId int64, name string, channelType int) { +func StoreChannel(channelId, guildId uint64, name string, channelType int) { channel := Channel{ ChannelId: channelId, GuildId: guildId, @@ -23,23 +23,23 @@ func StoreChannel(channelId, guildId int64, name string, channelType int) { Type: channelType, } - database.Database.Where(&Channel{ChannelId:channelId}).Assign(&channel).FirstOrCreate(&Channel{}) + database.Database.Where(&Channel{ChannelId: channelId}).Assign(&channel).FirstOrCreate(&Channel{}) } -func DeleteChannel(channelId int64) { +func DeleteChannel(channelId uint64) { var node Channel database.Database.Where(Channel{ChannelId: channelId}).Take(&node) database.Database.Delete(&node) } -func GetCachedChannelsByGuild(guildId int64, res chan []Channel) { +func GetCachedChannelsByGuild(guildId uint64, res chan []Channel) { var nodes []Channel database.Database.Where(Channel{GuildId: guildId}).Find(&nodes) res <- nodes } // Util function ig -func GetCategories(guildId int64, res chan []Channel) { +func GetCategories(guildId uint64, res chan []Channel) { channelsChan := make(chan []Channel) go GetCachedChannelsByGuild(guildId, channelsChan) channels := <-channelsChan diff --git a/database/table/namingscheme.go b/database/table/namingscheme.go index ffe7bb6..abef04d 100644 --- a/database/table/namingscheme.go +++ b/database/table/namingscheme.go @@ -3,7 +3,7 @@ package table import "github.com/TicketsBot/GoPanel/database" type TicketNamingScheme struct { - Guild int64 `gorm:"column:GUILDID;unique;primary_key"` + Guild uint64 `gorm:"column:GUILDID;unique;primary_key"` NamingScheme string `gorm:"column:NAMINGSCHEME;type:VARCHAR(16)"` } @@ -20,7 +20,7 @@ func (TicketNamingScheme) TableName() string { return "TicketNamingScheme" } -func GetTicketNamingScheme(guild int64, ch chan NamingScheme) { +func GetTicketNamingScheme(guild uint64, ch chan NamingScheme) { var node TicketNamingScheme database.Database.Where(TicketNamingScheme{Guild: guild}).First(&node) namingScheme := node.NamingScheme @@ -32,6 +32,6 @@ func GetTicketNamingScheme(guild int64, ch chan NamingScheme) { } } -func SetTicketNamingScheme(guild int64, scheme NamingScheme) { +func SetTicketNamingScheme(guild uint64, scheme NamingScheme) { database.Database.Where(&TicketNamingScheme{Guild: guild}).Assign(&TicketNamingScheme{NamingScheme: string(scheme)}).FirstOrCreate(&TicketNamingScheme{}) } diff --git a/database/table/panels.go b/database/table/panels.go index ae0c775..c65a006 100644 --- a/database/table/panels.go +++ b/database/table/panels.go @@ -5,14 +5,13 @@ import ( ) type Panel struct { - MessageId int64 `gorm:"column:MESSAGEID"` - ChannelId int64 `gorm:"column:CHANNELID"` - GuildId int64 `gorm:"column:GUILDID"` // Might be useful in the future so we store it - + MessageId uint64 `gorm:"column:MESSAGEID"` + ChannelId uint64 `gorm:"column:CHANNELID"` + GuildId uint64 `gorm:"column:GUILDID"` // Might be useful in the future so we store it Title string `gorm:"column:TITLE;type:VARCHAR(255)"` Content string `gorm:"column:CONTENT;type:TEXT"` Colour int `gorm:"column:COLOUR` - TargetCategory int64 `gorm:"column:TARGETCATEGORY"` + TargetCategory uint64 `gorm:"column:TARGETCATEGORY"` ReactionEmote string `gorm:"column:REACTIONEMOTE;type:VARCHAR(32)"` } @@ -20,7 +19,7 @@ func (Panel) TableName() string { return "panels" } -func AddPanel(messageId, channelId, guildId int64, title, content string, colour int, targetCategory int64, reactionEmote string) { +func AddPanel(messageId, channelId, guildId uint64, title, content string, colour int, targetCategory uint64, reactionEmote string) { database.Database.Create(&Panel{ MessageId: messageId, ChannelId: channelId, @@ -34,18 +33,18 @@ func AddPanel(messageId, channelId, guildId int64, title, content string, colour }) } -func IsPanel(messageId int64, ch chan bool) { +func IsPanel(messageId uint64, ch chan bool) { var count int database.Database.Table(Panel{}.TableName()).Where(Panel{MessageId: messageId}).Count(&count) ch <- count > 0 } -func GetPanelsByGuild(guildId int64, ch chan []Panel) { +func GetPanelsByGuild(guildId uint64, ch chan []Panel) { var panels []Panel database.Database.Where(Panel{GuildId: guildId}).Find(&panels) ch <- panels } -func DeletePanel(msgId int64) { +func DeletePanel(msgId uint64) { database.Database.Where(Panel{MessageId: msgId}).Delete(Panel{}) } diff --git a/database/table/panelsettings.go b/database/table/panelsettings.go index 5713d8e..f53fdc0 100644 --- a/database/table/panelsettings.go +++ b/database/table/panelsettings.go @@ -5,27 +5,27 @@ import ( ) type PanelSettings struct { - GuildId int64 `gorm:"column:GUILDID"` - Title string `gorm:"column:TITLE;type:VARCHAR(255)"` + GuildId uint64 `gorm:"column:GUILDID"` + Title string `gorm:"column:TITLE;type:VARCHAR(255)"` Content string `gorm:"column:CONTENT;type:TEXT"` - Colour int `gorm:"column:COLOUR` + Colour int `gorm:"column:COLOUR` } func (PanelSettings) TableName() string { return "panelsettings" } -func UpdatePanelSettings(guildId int64, title string, content string, colour int) { +func UpdatePanelSettings(guildId uint64, title string, content string, colour int) { settings := PanelSettings{ - Title: title, + Title: title, Content: content, - Colour: colour, + Colour: colour, } database.Database.Where(&PanelSettings{GuildId: guildId}).Assign(&settings).FirstOrCreate(&PanelSettings{}) } -func UpdatePanelTitle(guildId int64, title string) { +func UpdatePanelTitle(guildId uint64, title string) { settings := PanelSettings{ Title: title, } @@ -33,7 +33,7 @@ func UpdatePanelTitle(guildId int64, title string) { database.Database.Where(&PanelSettings{GuildId: guildId}).Assign(&settings).FirstOrCreate(&PanelSettings{}) } -func UpdatePanelContent(guildId int64, content string) { +func UpdatePanelContent(guildId uint64, content string) { settings := PanelSettings{ Content: content, } @@ -41,7 +41,7 @@ func UpdatePanelContent(guildId int64, content string) { database.Database.Where(&PanelSettings{GuildId: guildId}).Assign(&settings).FirstOrCreate(&PanelSettings{}) } -func UpdatePanelColour(guildId int64, colour int) { +func UpdatePanelColour(guildId uint64, colour int) { settings := PanelSettings{ Colour: colour, } @@ -49,11 +49,11 @@ func UpdatePanelColour(guildId int64, colour int) { database.Database.Where(&PanelSettings{GuildId: guildId}).Assign(&settings).FirstOrCreate(&PanelSettings{}) } -func GetPanelSettings(guildId int64) PanelSettings { +func GetPanelSettings(guildId uint64) PanelSettings { settings := PanelSettings{ - Title: "Open A Ticket", + Title: "Open A Ticket", Content: "React with :envelope_with_arrow: to open a ticket", - Colour: 2335514, + Colour: 2335514, } database.Database.Where(PanelSettings{GuildId: guildId}).First(&settings) diff --git a/database/table/permissions.go b/database/table/permissions.go index 6041878..535fd72 100644 --- a/database/table/permissions.go +++ b/database/table/permissions.go @@ -1,44 +1,44 @@ -package table - -import "github.com/TicketsBot/GoPanel/database" - -type PermissionNode struct { - GuildId int64 `gorm:"column:GUILDID"` - UserId int64 `gorm:"column:USERID"` - IsSupport bool `gorm:"column:ISSUPPORT"` - IsAdmin bool `gorm:"column:ISADMIN"` -} - -func (PermissionNode) TableName() string { - return "permissions" -} - -func GetAdminGuilds(userId int64) []int64 { - var nodes []PermissionNode - database.Database.Where(&PermissionNode{UserId: userId}).Find(&nodes) - - ids := make([]int64, 0) - for _, node := range nodes { - ids = append(ids, node.GuildId) - } - - return ids -} - -func IsSupport(guildId int64, userId int64) bool { - var node PermissionNode - database.Database.Where(&PermissionNode{GuildId: guildId, UserId: userId}).Take(&node) - return node.IsSupport -} - -func IsAdmin(guildId int64, userId int64) bool { - var node PermissionNode - database.Database.Where(&PermissionNode{GuildId: guildId, UserId: userId}).Take(&node) - return node.IsAdmin -} - -func IsStaff(guildId int64, userId int64) bool { - var node PermissionNode - database.Database.Where(&PermissionNode{GuildId: guildId, UserId: userId}).Take(&node) - return node.IsAdmin || node.IsSupport -} +package table + +import "github.com/TicketsBot/GoPanel/database" + +type PermissionNode struct { + GuildId uint64 `gorm:"column:GUILDID"` + UserId uint64 `gorm:"column:USERID"` + IsSupport bool `gorm:"column:ISSUPPORT"` + IsAdmin bool `gorm:"column:ISADMIN"` +} + +func (PermissionNode) TableName() string { + return "permissions" +} + +func GetAdminGuilds(userId uint64) []uint64 { + var nodes []PermissionNode + database.Database.Where(&PermissionNode{UserId: userId}).Find(&nodes) + + ids := make([]uint64, 0) + for _, node := range nodes { + ids = append(ids, node.GuildId) + } + + return ids +} + +func IsSupport(guildId uint64, userId uint64) bool { + var node PermissionNode + database.Database.Where(&PermissionNode{GuildId: guildId, UserId: userId}).Take(&node) + return node.IsSupport +} + +func IsAdmin(guildId uint64, userId uint64) bool { + var node PermissionNode + database.Database.Where(&PermissionNode{GuildId: guildId, UserId: userId}).Take(&node) + return node.IsAdmin +} + +func IsStaff(guildId uint64, userId uint64) bool { + var node PermissionNode + database.Database.Where(&PermissionNode{GuildId: guildId, UserId: userId}).Take(&node) + return node.IsAdmin || node.IsSupport +} diff --git a/database/table/pingeveryone.go b/database/table/pingeveryone.go index 5eaa444..02c788e 100644 --- a/database/table/pingeveryone.go +++ b/database/table/pingeveryone.go @@ -1,37 +1,37 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type PingEveryone struct { - GuildId int64 `gorm:"column:GUILDID"` - PingEveryone bool `gorm:"column:PINGEVERYONE;type:TINYINT"` -} - -func (PingEveryone) TableName() string { - return "pingeveryone" -} - -// tldr I hate gorm -func UpdatePingEveryone(guildId int64, pingEveryone bool) { - var settings []PingEveryone - database.Database.Where(&PingEveryone{GuildId: guildId}).Find(&settings) - - updated := PingEveryone{guildId, pingEveryone} - - if len(settings) == 0 { - database.Database.Create(&updated) - } else { - database.Database.Table("pingeveryone").Where("GUILDID = ?", guildId).Update("PINGEVERYONE", pingEveryone) - } - - //database.Database.Where(&PingEveryone{GuildId: guildId}).Assign(&updated).FirstOrCreate(&PingEveryone{}) -} - -func GetPingEveryone(guildId int64) bool { - pingEveryone := PingEveryone{PingEveryone: true} - database.Database.Where(&PingEveryone{GuildId: guildId}).First(&pingEveryone) - - return pingEveryone.PingEveryone -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type PingEveryone struct { + GuildId uint64 `gorm:"column:GUILDID"` + PingEveryone bool `gorm:"column:PINGEVERYONE;type:TINYINT"` +} + +func (PingEveryone) TableName() string { + return "pingeveryone" +} + +// tldr I hate gorm +func UpdatePingEveryone(guildId uint64, pingEveryone bool) { + var settings []PingEveryone + database.Database.Where(&PingEveryone{GuildId: guildId}).Find(&settings) + + updated := PingEveryone{guildId, pingEveryone} + + if len(settings) == 0 { + database.Database.Create(&updated) + } else { + database.Database.Table("pingeveryone").Where("GUILDID = ?", guildId).Update("PINGEVERYONE", pingEveryone) + } + + //database.Database.Where(&PingEveryone{GuildId: guildId}).Assign(&updated).FirstOrCreate(&PingEveryone{}) +} + +func GetPingEveryone(guildId uint64) bool { + pingEveryone := PingEveryone{PingEveryone: true} + database.Database.Where(&PingEveryone{GuildId: guildId}).First(&pingEveryone) + + return pingEveryone.PingEveryone +} diff --git a/database/table/prefix.go b/database/table/prefix.go index 8cc3911..cd76ee6 100644 --- a/database/table/prefix.go +++ b/database/table/prefix.go @@ -1,25 +1,25 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type Prefix struct { - GuildId int64 `gorm:"column:GUILDID"` - Prefix string `gorm:"column:PREFIX;type:varchar(8)"` -} - -func (Prefix) TableName() string { - return "prefix" -} - -func UpdatePrefix(guildId int64, prefix string) { - database.Database.Where(&Prefix{GuildId: guildId}).Assign(&Prefix{Prefix: prefix}).FirstOrCreate(&Prefix{}) -} - -func GetPrefix(guildId int64) string { - prefix := Prefix{Prefix: "t!"} - database.Database.Where(&Prefix{GuildId: guildId}).First(&prefix) - - return prefix.Prefix -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type Prefix struct { + GuildId uint64 `gorm:"column:GUILDID"` + Prefix string `gorm:"column:PREFIX;type:varchar(8)"` +} + +func (Prefix) TableName() string { + return "prefix" +} + +func UpdatePrefix(guildId uint64, prefix string) { + database.Database.Where(&Prefix{GuildId: guildId}).Assign(&Prefix{Prefix: prefix}).FirstOrCreate(&Prefix{}) +} + +func GetPrefix(guildId uint64) string { + prefix := Prefix{Prefix: "t!"} + database.Database.Where(&Prefix{GuildId: guildId}).First(&prefix) + + return prefix.Prefix +} diff --git a/database/table/premiumguilds.go b/database/table/premiumguilds.go index 0e40977..a7b4d9f 100644 --- a/database/table/premiumguilds.go +++ b/database/table/premiumguilds.go @@ -7,18 +7,18 @@ import ( ) type PremiumGuilds struct { - Guild int64 `gorm:"column:GUILDID;unique;primary_key"` - Expiry int64 `gorm:"column:EXPIRY"` - User int64 `gorm:"column:USERID"` - ActivatedBy int64 `gorm:"column:ACTIVATEDBY"` - Keys string `gorm:"column:KEYSUSED"` + Guild uint64 `gorm:"column:GUILDID;unique;primary_key"` + Expiry int64 `gorm:"column:EXPIRY"` + User uint64 `gorm:"column:USERID"` + ActivatedBy uint64 `gorm:"column:ACTIVATEDBY"` + Keys string `gorm:"column:KEYSUSED"` } func (PremiumGuilds) TableName() string { return "premiumguilds" } -func IsPremium(guild int64, ch chan bool) { +func IsPremium(guild uint64, ch chan bool) { var node PremiumGuilds database.Database.Where(PremiumGuilds{Guild: guild}).First(&node) @@ -31,17 +31,17 @@ func IsPremium(guild int64, ch chan bool) { ch <- node.Expiry > current } -func AddPremium(key string, guild, userId, length, activatedBy int64) { +func AddPremium(key string, guild, userId uint64, length int64, activatedBy uint64) { var expiry int64 hasPrem := make(chan bool) go IsPremium(guild, hasPrem) - isPremium := <- hasPrem + isPremium := <-hasPrem if isPremium { expiryChan := make(chan int64) go GetExpiry(guild, expiryChan) - currentExpiry := <- expiryChan + currentExpiry := <-expiryChan expiry = currentExpiry + length } else { @@ -51,21 +51,21 @@ func AddPremium(key string, guild, userId, length, activatedBy int64) { keysChan := make(chan []string) go GetKeysUsed(guild, keysChan) - keys := <- keysChan + keys := <-keysChan keys = append(keys, key) - keysStr := strings.Join(keys,",") + keysStr := strings.Join(keys, ",") var node PremiumGuilds database.Database.Where(PremiumGuilds{Guild: guild}).Assign(PremiumGuilds{Expiry: expiry, User: userId, ActivatedBy: activatedBy, Keys: keysStr}).FirstOrCreate(&node) } -func GetExpiry(guild int64, ch chan int64) { +func GetExpiry(guild uint64, ch chan int64) { var node PremiumGuilds database.Database.Where(PremiumGuilds{Guild: guild}).First(&node) ch <- node.Expiry } -func GetKeysUsed(guild int64, ch chan []string) { +func GetKeysUsed(guild uint64, ch chan []string) { var node PremiumGuilds database.Database.Where(PremiumGuilds{Guild: guild}).First(&node) ch <- strings.Split(node.Keys, ",") diff --git a/database/table/rolepermissions.go b/database/table/rolepermissions.go index f9460e4..16165f2 100644 --- a/database/table/rolepermissions.go +++ b/database/table/rolepermissions.go @@ -2,62 +2,36 @@ package table import ( "github.com/TicketsBot/GoPanel/database" - "strconv" ) type RolePermissions struct { - GuildId int64 `gorm:"column:GUILDID"` - RoleId int64 `gorm:"column:ROLEID"` - Support bool `gorm:"column:ISSUPPORT"` - Admin bool `gorm:"column:ISADMIN"` + GuildId uint64 `gorm:"column:GUILDID"` + RoleId uint64 `gorm:"column:ROLEID"` + Support bool `gorm:"column:ISSUPPORT"` + Admin bool `gorm:"column:ISADMIN"` } func (RolePermissions) TableName() string { return "role_permissions" } -func IsSupportRole(guild string, role string, ch chan bool) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - ch <- false - return - } - - rollId, err := strconv.ParseInt(role, 10, 64); if err != nil { - ch <- false - return - } - +func IsSupportRole(guildId, roleId uint64, ch chan bool) { var node RolePermissions - database.Database.Where(RolePermissions{GuildId: guildId, RoleId: rollId}).First(&node) + database.Database.Where(RolePermissions{GuildId: guildId, RoleId: roleId}).First(&node) ch <- node.Support } -func IsAdminRole(guild string, role string, ch chan bool) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - ch <- false - return - } - - rollId, err := strconv.ParseInt(role, 10, 64); if err != nil { - ch <- false - return - } - +func IsAdminRole(guildId, roleId uint64, ch chan bool) { var node RolePermissions - database.Database.Where(RolePermissions{GuildId: guildId, RoleId: rollId}).First(&node) + database.Database.Where(RolePermissions{GuildId: guildId, RoleId: roleId}).First(&node) ch <- node.Admin } -func GetAdminRoles(guild string, ch chan []int64) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - ch <- []int64{} - return - } - +func GetAdminRoles(guildId uint64, ch chan []uint64) { var nodes []RolePermissions database.Database.Where(RolePermissions{GuildId: guildId, Admin: true}).Find(&nodes) - ids := make([]int64, 0) + ids := make([]uint64, 0) for _, node := range nodes { ids = append(ids, node.RoleId) } @@ -65,16 +39,11 @@ func GetAdminRoles(guild string, ch chan []int64) { ch <- ids } -func GetSupportRoles(guild string, ch chan []int64) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - ch <- []int64{} - return - } - +func GetSupportRoles(guildId uint64, ch chan []uint64) { var nodes []RolePermissions database.Database.Where(RolePermissions{GuildId: guildId, Support: true, Admin: false}).Find(&nodes) - ids := make([]int64, 0) + ids := make([]uint64, 0) for _, node := range nodes { ids = append(ids, node.RoleId) } @@ -82,59 +51,27 @@ func GetSupportRoles(guild string, ch chan []int64) { ch <- ids } -func AddAdminRole(guild string, role string) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - return - } - - roleId, err := strconv.ParseInt(role, 10, 64); if err != nil { - return - } - +func AddAdminRole(guildId, roleId uint64) { var node RolePermissions database.Database.Where(RolePermissions{GuildId: guildId, RoleId: roleId}).Assign(RolePermissions{Admin: true, Support: true}).FirstOrCreate(&node) } -func AddSupportRole(guild string, role string) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - return - } - - roleId, err := strconv.ParseInt(role, 10, 64); if err != nil { - return - } - +func AddSupportRole(guildId, roleId uint64) { var node RolePermissions database.Database.Where(RolePermissions{GuildId: guildId, RoleId: roleId}).Assign(RolePermissions{Support: true}).FirstOrCreate(&node) } -func RemoveAdminRole(guild string, role string) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - return - } - - roleId, err := strconv.ParseInt(role, 10, 64); if err != nil { - return - } - +func RemoveAdminRole(guildId, roleId uint64) { var node RolePermissions database.Database.Where(RolePermissions{GuildId: guildId, RoleId: roleId}).Take(&node) database.Database.Model(&node).Where("GUILDID = ? AND ROLEID = ?", guildId, roleId).Update("ISADMIN", false) } -func RemoveSupportRole(guild string, role string) { - guildId, err := strconv.ParseInt(guild, 10, 64); if err != nil { - return - } - - roleId, err := strconv.ParseInt(role, 10, 64); if err != nil { - return - } - +func RemoveSupportRole(guildId, roleId uint64) { var node RolePermissions database.Database.Where(RolePermissions{GuildId: guildId, RoleId: roleId}).Take(&node) database.Database.Model(&node).Where("GUILDID = ? AND ROLEID = ?", guildId, roleId).Updates(map[string]interface{}{ - "ISADMIN": false, + "ISADMIN": false, "ISSUPPORT": false, }) } diff --git a/database/table/rolescache.go b/database/table/rolescache.go index 6f4fca2..abad226 100644 --- a/database/table/rolescache.go +++ b/database/table/rolescache.go @@ -5,17 +5,17 @@ import ( ) type CachedRole struct { - AssociationId int `gorm:"column:ASSOCIATIONID;primary_key;auto_increment"` - GuildId int64 `gorm:"column:GUILDID"` - UserId int64 `gorm:"column:USERID"` - RoleId int64 `gorm:"column:ROLEID"` + AssociationId int `gorm:"column:ASSOCIATIONID;primary_key;auto_increment"` + GuildId uint64 `gorm:"column:GUILDID"` + UserId uint64 `gorm:"column:USERID"` + RoleId uint64 `gorm:"column:ROLEID"` } func (CachedRole) TableName() string { return "cache_roles" } -func DeleteRoles(guildId, userId int64) { +func DeleteRoles(guildId, userId uint64) { database.Database.Where(CachedRole{ GuildId: guildId, UserId: userId, @@ -23,7 +23,7 @@ func DeleteRoles(guildId, userId int64) { } // TODO: Cache invalidation -func CacheRole(guildId, userId, roleId int64) { +func CacheRole(guildId, userId, roleId uint64) { database.Database.Create(&CachedRole{ GuildId: guildId, UserId: userId, @@ -31,14 +31,14 @@ func CacheRole(guildId, userId, roleId int64) { }) } -func GetCachedRoles(guildId, userId int64, res chan []int64) { +func GetCachedRoles(guildId, userId uint64, res chan []uint64) { var rows []CachedRole database.Database.Where(&CachedRole{ GuildId: guildId, UserId: userId, }).Find(&rows) - roles := make([]int64, 0) + roles := make([]uint64, 0) for _, row := range rows { roles = append(roles, row.RoleId) } diff --git a/database/table/ticketarchive.go b/database/table/ticketarchive.go index 47d2cf2..040abc8 100644 --- a/database/table/ticketarchive.go +++ b/database/table/ticketarchive.go @@ -1,50 +1,50 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type TicketArchive struct { - Uuid string `gorm:"column:UUID;type:varchar(36)"` - Guild int64 `gorm:"column:GUILDID"` - User int64 `gorm:"column:USERID"` - Username string `gorm:"column:USERNAME;type:varchar(32)"` - TicketId int `gorm:"column:TICKETID"` - CdnUrl string `gorm:"column:CDNURL;type:varchar(100)"` -} - -func (TicketArchive) TableName() string { - return "ticketarchive" -} - -func GetTicketArchives(guildId int64) []TicketArchive { - var archives []TicketArchive - database.Database.Where(&TicketArchive{Guild: guildId}).Order("TICKETID desc").Find(&archives) - - return archives -} - -func GetFilteredTicketArchives(guildId int64, userId int64, username string, ticketId int) []TicketArchive { - var archives []TicketArchive - - query := database.Database.Where(&TicketArchive{Guild: guildId}) - if userId != 0 { - query = query.Where(&TicketArchive{User: userId}) - } - if username != "" { - query = query.Where(&TicketArchive{Username: username}) - } - if ticketId != 0 { - query = query.Where(&TicketArchive{TicketId: ticketId}) - } - - query.Order("TICKETID desc").Find(&archives) - - return archives -} - -func GetCdnUrl(guildId int64, uuid string) string { - var archive TicketArchive - database.Database.Where(&TicketArchive{Guild: guildId, Uuid: uuid}).First(&archive) - return archive.CdnUrl -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type TicketArchive struct { + Uuid string `gorm:"column:UUID;type:varchar(36)"` + Guild uint64 `gorm:"column:GUILDID"` + User uint64 `gorm:"column:USERID"` + Username string `gorm:"column:USERNAME;type:varchar(32)"` + TicketId int `gorm:"column:TICKETID"` + CdnUrl string `gorm:"column:CDNURL;type:varchar(100)"` +} + +func (TicketArchive) TableName() string { + return "ticketarchive" +} + +func GetTicketArchives(guildId uint64) []TicketArchive { + var archives []TicketArchive + database.Database.Where(&TicketArchive{Guild: guildId}).Order("TICKETID desc").Find(&archives) + + return archives +} + +func GetFilteredTicketArchives(guildId uint64, userId uint64, username string, ticketId int) []TicketArchive { + var archives []TicketArchive + + query := database.Database.Where(&TicketArchive{Guild: guildId}) + if userId != 0 { + query = query.Where(&TicketArchive{User: userId}) + } + if username != "" { + query = query.Where(&TicketArchive{Username: username}) + } + if ticketId != 0 { + query = query.Where(&TicketArchive{TicketId: ticketId}) + } + + query.Order("TICKETID desc").Find(&archives) + + return archives +} + +func GetCdnUrl(guildId uint64, uuid string) string { + var archive TicketArchive + database.Database.Where(&TicketArchive{Guild: guildId, Uuid: uuid}).First(&archive) + return archive.CdnUrl +} diff --git a/database/table/ticketlimit.go b/database/table/ticketlimit.go index 5b34e15..f463e37 100644 --- a/database/table/ticketlimit.go +++ b/database/table/ticketlimit.go @@ -1,25 +1,25 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type TicketLimit struct { - GuildId int64 `gorm:"column:GUILDID"` - Limit int `gorm:"column:TICKETLIMIT"` -} - -func (TicketLimit) TableName() string { - return "ticketlimit" -} - -func UpdateTicketLimit(guildId int64, limit int) { - database.Database.Where(&TicketLimit{GuildId: guildId}).Assign(&TicketLimit{Limit: limit}).FirstOrCreate(&TicketLimit{}) -} - -func GetTicketLimit(guildId int64) int { - limit := TicketLimit{Limit: 5} - database.Database.Where(&TicketLimit{GuildId: guildId}).First(&limit) - - return limit.Limit -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type TicketLimit struct { + GuildId uint64 `gorm:"column:GUILDID"` + Limit int `gorm:"column:TICKETLIMIT"` +} + +func (TicketLimit) TableName() string { + return "ticketlimit" +} + +func UpdateTicketLimit(guildId uint64, limit int) { + database.Database.Where(&TicketLimit{GuildId: guildId}).Assign(&TicketLimit{Limit: limit}).FirstOrCreate(&TicketLimit{}) +} + +func GetTicketLimit(guildId uint64) int { + limit := TicketLimit{Limit: 5} + database.Database.Where(&TicketLimit{GuildId: guildId}).First(&limit) + + return limit.Limit +} diff --git a/database/table/tickets.go b/database/table/tickets.go index 1073803..3174ea7 100644 --- a/database/table/tickets.go +++ b/database/table/tickets.go @@ -1,42 +1,42 @@ -package table - -import "github.com/TicketsBot/GoPanel/database" - -type Ticket struct { - Uuid string `gorm:"column:UUID;type:varchar(36);primary_key"` - TicketId int `gorm:"column:ID"` - Guild int64 `gorm:"column:GUILDID"` - Channel int64 `gorm:"column:CHANNELID"` - Owner int64 `gorm:"column:OWNERID"` - Members string `gorm:"column:MEMBERS;type:text"` - IsOpen bool `gorm:"column:OPEN"` - OpenTime int64 `gorm:"column:OPENTIME"` -} - -func (Ticket) TableName() string { - return "tickets" -} - -func GetTickets(guild int64) []Ticket { - var tickets []Ticket - database.Database.Where(&Ticket{Guild: guild}).Order("ID asc").Find(&tickets) - return tickets -} - -func GetOpenTickets(guild int64) []Ticket { - var tickets []Ticket - database.Database.Where(&Ticket{Guild: guild, IsOpen: true}).Order("ID asc").Find(&tickets) - return tickets -} - -func GetTicket(uuid string, ch chan Ticket) { - var ticket Ticket - database.Database.Where(&Ticket{Uuid: uuid}).First(&ticket) - ch <- ticket -} - -func GetTicketById(guild int64, id int, ch chan Ticket) { - var ticket Ticket - database.Database.Where(&Ticket{Guild: guild, TicketId: id}).First(&ticket) - ch <- ticket -} +package table + +import "github.com/TicketsBot/GoPanel/database" + +type Ticket struct { + Uuid string `gorm:"column:UUID;type:varchar(36);primary_key"` + TicketId int `gorm:"column:ID"` + Guild uint64 `gorm:"column:GUILDID"` + Channel uint64 `gorm:"column:CHANNELID"` + Owner uint64 `gorm:"column:OWNERID"` + Members string `gorm:"column:MEMBERS;type:text"` + IsOpen bool `gorm:"column:OPEN"` + OpenTime int64 `gorm:"column:OPENTIME"` +} + +func (Ticket) TableName() string { + return "tickets" +} + +func GetTickets(guild uint64) []Ticket { + var tickets []Ticket + database.Database.Where(&Ticket{Guild: guild}).Order("ID asc").Find(&tickets) + return tickets +} + +func GetOpenTickets(guild uint64) []Ticket { + var tickets []Ticket + database.Database.Where(&Ticket{Guild: guild, IsOpen: true}).Order("ID asc").Find(&tickets) + return tickets +} + +func GetTicket(uuid string, ch chan Ticket) { + var ticket Ticket + database.Database.Where(&Ticket{Uuid: uuid}).First(&ticket) + ch <- ticket +} + +func GetTicketById(guild uint64, id int, ch chan Ticket) { + var ticket Ticket + database.Database.Where(&Ticket{Guild: guild, TicketId: id}).First(&ticket) + ch <- ticket +} diff --git a/database/table/username.go b/database/table/username.go index da52971..e848d43 100644 --- a/database/table/username.go +++ b/database/table/username.go @@ -1,34 +1,34 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type UsernameNode struct { - Id int64 `gorm:"column:USERID;primary_key"` - Name string `gorm:"column:USERNAME;type:text"` // Base 64 encoded - Discriminator string `gorm:"column:DISCRIM;type:varchar(4)"` - Avatar string `gorm:"column:AVATARHASH;type:varchar(100)"` -} - -func (UsernameNode) TableName() string { - return "usernames" -} - -func GetUsername(id int64, ch chan string) { - node := UsernameNode{Name: "Unknown"} - database.Database.Where(&UsernameNode{Id: id}).First(&node) - ch <- node.Name -} - -func GetUserNodes(ids []int64) []UsernameNode { - var nodes []UsernameNode - database.Database.Where(ids).Find(&nodes) - return nodes -} - -func GetUserId(name, discrim string) int64 { - var node UsernameNode - database.Database.Where(&UsernameNode{Name: name, Discriminator: discrim}).First(&node) - return node.Id -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type UsernameNode struct { + Id uint64 `gorm:"column:USERID;primary_key"` + Name string `gorm:"column:USERNAME;type:text"` // Base 64 encoded + Discriminator string `gorm:"column:DISCRIM;type:varchar(4)"` + Avatar string `gorm:"column:AVATARHASH;type:varchar(100)"` +} + +func (UsernameNode) TableName() string { + return "usernames" +} + +func GetUsername(id uint64, ch chan string) { + node := UsernameNode{Name: "Unknown"} + database.Database.Where(&UsernameNode{Id: id}).First(&node) + ch <- node.Name +} + +func GetUserNodes(ids []uint64) []UsernameNode { + var nodes []UsernameNode + database.Database.Where(ids).Find(&nodes) + return nodes +} + +func GetUserId(name, discrim string) uint64 { + var node UsernameNode + database.Database.Where(&UsernameNode{Name: name, Discriminator: discrim}).First(&node) + return node.Id +} diff --git a/database/table/userscanclose.go b/database/table/userscanclose.go index 46c433f..f324925 100644 --- a/database/table/userscanclose.go +++ b/database/table/userscanclose.go @@ -1,27 +1,27 @@ -package table - -import "github.com/TicketsBot/GoPanel/database" - -type UserCanClose struct { - Guild int64 `gorm:"column:GUILDID;unique;primary_key"` - CanClose *bool `gorm:"column:CANCLOSE"` -} - -func (UserCanClose) TableName() string { - return "usercanclose" -} - -func IsUserCanClose(guild int64, ch chan bool) { - var node UserCanClose - database.Database.Where(UserCanClose{Guild: guild}).First(&node) - - if node.CanClose == nil { - ch <- true - } else { - ch <- *node.CanClose - } -} - -func SetUserCanClose(guild int64, value bool) { - database.Database.Where(&UserCanClose{Guild: guild}).Assign(&UserCanClose{CanClose: &value}).FirstOrCreate(&UserCanClose{}) -} +package table + +import "github.com/TicketsBot/GoPanel/database" + +type UserCanClose struct { + Guild uint64 `gorm:"column:GUILDID;unique;primary_key"` + CanClose *bool `gorm:"column:CANCLOSE"` +} + +func (UserCanClose) TableName() string { + return "usercanclose" +} + +func IsUserCanClose(guild uint64, ch chan bool) { + var node UserCanClose + database.Database.Where(UserCanClose{Guild: guild}).First(&node) + + if node.CanClose == nil { + ch <- true + } else { + ch <- *node.CanClose + } +} + +func SetUserCanClose(guild uint64, value bool) { + database.Database.Where(&UserCanClose{Guild: guild}).Assign(&UserCanClose{CanClose: &value}).FirstOrCreate(&UserCanClose{}) +} diff --git a/database/table/votes.go b/database/table/votes.go index 7800ba6..61594cd 100644 --- a/database/table/votes.go +++ b/database/table/votes.go @@ -1,22 +1,22 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" - "time" -) - -type Votes struct { - Id int64 `gorm:"type:bigint;unique_index;primary_key"` - VoteTime time.Time -} - -func (Votes) TableName() string { - return "votes" -} - -func HasVoted(owner int64, ch chan bool) { - var node Votes - database.Database.Where(Votes{Id: owner}).First(&node) - - ch <- time.Now().Sub(node.VoteTime) < 24 * time.Hour -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" + "time" +) + +type Votes struct { + Id uint64 `gorm:"type:bigint;unique_index;primary_key"` + VoteTime time.Time +} + +func (Votes) TableName() string { + return "votes" +} + +func HasVoted(owner uint64, ch chan bool) { + var node Votes + database.Database.Where(Votes{Id: owner}).First(&node) + + ch <- time.Now().Sub(node.VoteTime) < 24*time.Hour +} diff --git a/database/table/welcomemessage.go b/database/table/welcomemessage.go index 466c479..f932860 100644 --- a/database/table/welcomemessage.go +++ b/database/table/welcomemessage.go @@ -1,25 +1,25 @@ -package table - -import ( - "github.com/TicketsBot/GoPanel/database" -) - -type WelcomeMessage struct { - GuildId int64 `gorm:"column:GUILDID"` - Message string `gorm:"column:MESSAGE;type:text"` -} - -func (WelcomeMessage) TableName() string { - return "welcomemessages" -} - -func UpdateWelcomeMessage(guildId int64, message string) { - database.Database.Where(&WelcomeMessage{GuildId: guildId}).Assign(&WelcomeMessage{Message: message}).FirstOrCreate(&WelcomeMessage{}) -} - -func GetWelcomeMessage(guildId int64) string { - message := WelcomeMessage{Message: "No message specified"} - database.Database.Where(&WelcomeMessage{GuildId: guildId}).First(&message) - - return message.Message -} +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type WelcomeMessage struct { + GuildId uint64 `gorm:"column:GUILDID"` + Message string `gorm:"column:MESSAGE;type:text"` +} + +func (WelcomeMessage) TableName() string { + return "welcomemessages" +} + +func UpdateWelcomeMessage(guildId uint64, message string) { + database.Database.Where(&WelcomeMessage{GuildId: guildId}).Assign(&WelcomeMessage{Message: message}).FirstOrCreate(&WelcomeMessage{}) +} + +func GetWelcomeMessage(guildId uint64) string { + message := WelcomeMessage{Message: "No message specified"} + database.Database.Where(&WelcomeMessage{GuildId: guildId}).First(&message) + + return message.Message +} diff --git a/utils/discord/endpoints/guild/getGuildMember.go b/utils/discord/endpoints/guild/getGuildMember.go index 9da87ab..310ff5f 100644 --- a/utils/discord/endpoints/guild/getGuildMember.go +++ b/utils/discord/endpoints/guild/getGuildMember.go @@ -3,13 +3,12 @@ package guild import ( "fmt" "github.com/TicketsBot/GoPanel/utils/discord" - "strconv" ) -func GetGuildMember(guildId, userId int) discord.Endpoint { +func GetGuildMember(guildId, userId uint64) discord.Endpoint { return discord.Endpoint{ RequestType: discord.GET, AuthorizationType: discord.BOT, - Endpoint: fmt.Sprintf("/guilds/%s/members/%s", strconv.Itoa(guildId), strconv.Itoa(userId)), + Endpoint: fmt.Sprintf("/guilds/%d/members/%d", guildId, userId), } } diff --git a/utils/discord/objects/member.go b/utils/discord/objects/member.go index 99d8079..465e574 100644 --- a/utils/discord/objects/member.go +++ b/utils/discord/objects/member.go @@ -5,7 +5,7 @@ import "github.com/TicketsBot/GoPanel/utils/types" type Member struct { User User Nick string - Roles types.Int64StringSlice `json:"roles,string"` + Roles types.UInt64StringSlice `json:"roles,string"` JoinedAt string Deaf bool Mute bool diff --git a/utils/permissionutils.go b/utils/permissionutils.go index 1a56136..10e06f2 100644 --- a/utils/permissionutils.go +++ b/utils/permissionutils.go @@ -14,7 +14,7 @@ import ( var roleCache = cache.New(time.Minute, time.Minute) -func IsAdmin(guild objects.Guild, guildId, userId int64, res chan bool) { +func IsAdmin(guild objects.Guild, guildId, userId uint64, res chan bool) { if Contains(config.Conf.Admins, strconv.Itoa(int(userId))) { res <- true } @@ -31,12 +31,12 @@ func IsAdmin(guild objects.Guild, guildId, userId int64, res chan bool) { res <- true } - userRolesChan := make(chan []int64) + userRolesChan := make(chan []uint64) go table.GetCachedRoles(guildId, userId, userRolesChan) userRoles := <-userRolesChan - adminRolesChan := make(chan []int64) - go table.GetAdminRoles(strconv.Itoa(int(guildId)), adminRolesChan) + adminRolesChan := make(chan []uint64) + go table.GetAdminRoles(guildId, adminRolesChan) adminRoles := <- adminRolesChan hasAdminRole := false @@ -56,15 +56,15 @@ func IsAdmin(guild objects.Guild, guildId, userId int64, res chan bool) { res <- false } -func GetRolesRest(store sessions.Session, guildId, userId int64) *[]int64 { +func GetRolesRest(store sessions.Session, guildId, userId uint64) *[]uint64 { var member objects.Member - endpoint := guild.GetGuildMember(int(guildId), int(userId)) + endpoint := guild.GetGuildMember(guildId, userId) if err, _ := endpoint.Request(store, nil, nil, &member); err != nil { log.Error(err.Error()) return nil } - roles := []int64(member.Roles) + roles := []uint64(member.Roles) return &roles } diff --git a/utils/premiumutils.go b/utils/premiumutils.go index 56a3167..9860431 100644 --- a/utils/premiumutils.go +++ b/utils/premiumutils.go @@ -23,17 +23,14 @@ type ProxyResponse struct { var premiumCache = cache.New(10 * time.Minute, 10 * time.Minute) -func IsPremiumGuild(store sessions.Session, guildIdRaw string, ch chan bool) { +func IsPremiumGuild(store sessions.Session, guildId uint64, ch chan bool) { + guildIdRaw := strconv.FormatUint(guildId, 10) + if premium, ok := premiumCache.Get(guildIdRaw); ok { ch<-premium.(bool) return } - guildId, err := strconv.ParseInt(guildIdRaw, 10, 64); if err != nil { - ch<-false - return - } - // First lookup by premium key, then votes, then patreon keyLookup := make(chan bool) go table.IsPremium(guildId, keyLookup) diff --git a/utils/sessionutils.go b/utils/sessionutils.go index a86e02b..d49bfe2 100644 --- a/utils/sessionutils.go +++ b/utils/sessionutils.go @@ -1,20 +1,20 @@ -package utils - -import ( - "github.com/gin-gonic/contrib/sessions" - "strconv" -) - -func IsLoggedIn(store sessions.Session) bool { - return store.Get("access_token") != nil && - store.Get("expiry") != nil && - store.Get("refresh_token") != nil && - store.Get("userid") != nil && - store.Get("name") != nil && - store.Get("avatar") != nil && - store.Get("csrf") != nil -} - -func GetUserId(store sessions.Session) (int64, error) { - return strconv.ParseInt(store.Get("userid").(string), 10, 64) -} +package utils + +import ( + "github.com/gin-gonic/contrib/sessions" + "strconv" +) + +func IsLoggedIn(store sessions.Session) bool { + return store.Get("access_token") != nil && + store.Get("expiry") != nil && + store.Get("refresh_token") != nil && + store.Get("userid") != nil && + store.Get("name") != nil && + store.Get("avatar") != nil && + store.Get("csrf") != nil +} + +func GetUserId(store sessions.Session) (uint64, error) { + return strconv.ParseUint(store.Get("userid").(string), 10, 64) +} diff --git a/utils/types/uint64stringslice.go b/utils/types/uint64stringslice.go new file mode 100644 index 0000000..f981be6 --- /dev/null +++ b/utils/types/uint64stringslice.go @@ -0,0 +1,44 @@ +package types + +import ( + "encoding/json" + "fmt" + "strconv" + "strings" +) + +type UInt64StringSlice []uint64 + +func (slice UInt64StringSlice) MarshalJSON() ([]byte, error) { + values := make([]string, len(slice)) + for i, value := range []uint64(slice) { + values[i] = fmt.Sprintf(`"%v"`, value) + } + + return []byte(fmt.Sprintf("[%v]", strings.Join(values, ","))), nil +} + +func (slice *UInt64StringSlice) UnmarshalJSON(b []byte) error { + // Try array of strings first. + var values []string + err := json.Unmarshal(b, &values) + if err != nil { + // Fall back to array of integers: + var values []uint64 + if err := json.Unmarshal(b, &values); err != nil { + return err + } + *slice = values + return nil + } + *slice = make([]uint64, len(values)) + for i, value := range values { + value, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return err + } + (*slice)[i] = value + } + return nil +} +