Skip to content

Commit

Permalink
Fixes to stores
Browse files Browse the repository at this point in the history
  • Loading branch information
koo04 committed Apr 23, 2024
1 parent 3f3c9a8 commit 5eeafb4
Show file tree
Hide file tree
Showing 17 changed files with 390 additions and 249 deletions.
6 changes: 3 additions & 3 deletions attendance/util.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package attendance

import (
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/members"
"github.com/sol-armada/admin/ranks"
"github.com/sol-armada/admin/settings"
)

func Issues(m *members.Member) []string {
Expand All @@ -13,7 +13,7 @@ func Issues(m *members.Member) []string {
issues = append(issues, "bot")
}

if m.Rank == ranks.Guest {
if m.IsGuest {
issues = append(issues, "guest")
}

Expand All @@ -33,7 +33,7 @@ func Issues(m *members.Member) []string {
issues = append(issues, "redacted org")
}

if m.Rank <= ranks.Member && m.PrimaryOrg != config.GetString("rsi_org_sid") {
if m.Rank <= ranks.Member && m.PrimaryOrg != settings.GetString("rsi_org_sid") {
issues = append(issues, "bad primary org")
}

Expand Down
12 changes: 6 additions & 6 deletions auth/pkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (

"github.com/apex/log"
"github.com/pkg/errors"
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/settings"
)

type Access struct {
Expand All @@ -24,19 +24,19 @@ func Authenticate(code string) (*Access, error) {
logger := log.WithField("code", code)
logger.Info("creating new member access")

redirectUri := strings.TrimSuffix(config.GetString("DISCORD.REDIRECT_URI"), "/")
redirectUri := strings.TrimSuffix(settings.GetString("DISCORD.REDIRECT_URI"), "/")
redirectUri = fmt.Sprintf("%s/login", redirectUri)

data := url.Values{}
data.Set("client_id", config.GetString("DISCORD.CLIENT_ID"))
data.Set("client_secret", config.GetString("DISCORD.CLIENT_SECRET"))
data.Set("client_id", settings.GetString("DISCORD.CLIENT_ID"))
data.Set("client_secret", settings.GetString("DISCORD.CLIENT_SECRET"))
data.Set("redirect_uri", redirectUri)
data.Set("grant_type", "authorization_code")
data.Set("code", code)

logger.WithFields(log.Fields{
"client_id": config.GetString("DISCORD.CLIENT_ID"),
"client_secret": config.GetString("DISCORD.CLIENT_SECRET"),
"client_id": settings.GetString("DISCORD.CLIENT_ID"),
"client_secret": settings.GetString("DISCORD.CLIENT_SECRET"),
"redirect_uri": redirectUri,
"grant_type": "authorization_code",
"code": code,
Expand Down
4 changes: 2 additions & 2 deletions bot/demerit.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ import (
"github.com/apex/log"
"github.com/bwmarrin/discordgo"
"github.com/pkg/errors"
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/members"
"github.com/sol-armada/admin/settings"
"github.com/sol-armada/admin/utils"
)

func giveDemeritCommandHandler(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) error {
logger := utils.GetLoggerFromContext(ctx).(*log.Entry)
logger.Debug("demerit command")

if !utils.StringSliceContainsOneOf(i.Member.Roles, config.GetStringSlice("FEATURES.MERIT.ALLOWED_ROLES")) {
if !utils.StringSliceContainsOneOf(i.Member.Roles, settings.GetStringSlice("FEATURES.MERIT.ALLOWED_ROLES")) {
logger.Debug("invalid permissions")

if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Expand Down
4 changes: 2 additions & 2 deletions bot/merit.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import (
"github.com/apex/log"
"github.com/bwmarrin/discordgo"
"github.com/pkg/errors"
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/members"
"github.com/sol-armada/admin/ranks"
"github.com/sol-armada/admin/settings"
"github.com/sol-armada/admin/utils"
)

Expand All @@ -22,7 +22,7 @@ func giveMeritCommandHandler(ctx context.Context, s *discordgo.Session, i *disco
return errors.Wrap(err, "getting user from storage for merit command")
}

if user.Rank > ranks.GetRankByName(config.GetStringWithDefault("FEATURES.ATTENDANCE.MIN_RANK", "admiral")) {
if user.Rank > ranks.GetRankByName(settings.GetStringWithDefault("FEATURES.ATTENDANCE.MIN_RANK", "admiral")) {
logger.Debug("invalid permissions")

if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Expand Down
71 changes: 44 additions & 27 deletions bot/monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ import (
"github.com/apex/log"
"github.com/bwmarrin/discordgo"
"github.com/pkg/errors"
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/health"
"github.com/sol-armada/admin/members"
"github.com/sol-armada/admin/ranks"
"github.com/sol-armada/admin/rsi"
"github.com/sol-armada/admin/settings"
"github.com/sol-armada/admin/stores"
"github.com/sol-armada/admin/utils"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
Expand All @@ -26,7 +27,14 @@ func (b *Bot) UserMonitor(stop <-chan bool, done chan bool) {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()

lastChecked := time.Now().UTC().Add(-30 * time.Minute)
membersStore, ok := stores.Get().GetMembersStore()
if !ok {
logger.Error("failed to get members store")
done <- true
return
}

lastChecked := time.Now().UTC().Add(-31 * time.Minute)
d := false
for {
select {
Expand All @@ -40,13 +48,9 @@ func (b *Bot) UserMonitor(stop <-chan bool, done chan bool) {
time.Sleep(10 * time.Second)
continue
}
if time.Now().UTC().After(lastChecked.Add(3 * time.Minute)) {
if time.Now().UTC().After(lastChecked.Add(30 * time.Minute)) {
logger.Info("scanning members")
if !stores.Connected() {
logger.Debug("storage not setup, waiting a bit")
time.Sleep(10 * time.Second)
continue
}
// TODO: Check if system is healthy

// rate limit protection
rateBucket := b.Ratelimiter.GetBucket("guild_member_check")
Expand Down Expand Up @@ -76,7 +80,7 @@ func (b *Bot) UserMonitor(stop <-chan bool, done chan bool) {

// get the stored members
storedMembers := []*members.Member{}
cur, err := stores.Members.List(bson.M{}, &options.FindOptions{
cur, err := membersStore.List(bson.M{}, &options.FindOptions{
Sort: bson.M{"rank": 1},
})
if err != nil {
Expand Down Expand Up @@ -182,27 +186,27 @@ func updateMembers(discordMembers []*discordgo.Member) error {
member.RSIMember = false
}

if member.RSIMember {
member.BadAffiliation = false
member.IsAlly = false

for _, affiliatedOrg := range member.Affilations {
if slices.Contains(config.GetStringSlice("enemies"), affiliatedOrg) {
member.BadAffiliation = true
break
}
}
for _, ally := range config.GetStringSlice("allies") {
if strings.EqualFold(member.PrimaryOrg, ally) {
member.IsAlly = true
break
}
}
}
// if member.RSIMember {
// member.BadAffiliation = false
// member.IsAlly = false

// for _, affiliatedOrg := range member.Affilations {
// if slices.Contains(settings.GetStringSlice("enemies"), affiliatedOrg) {
// member.BadAffiliation = true
// break
// }
// }
// for _, ally := range settings.GetStringSlice("allies") {
// if strings.EqualFold(member.PrimaryOrg, ally) {
// member.IsAlly = true
// break
// }
// }
// }

// discord related stuff
member.Avatar = discordMember.Avatar
if slices.Contains(discordMember.Roles, config.GetString("DISCORD.ROLE_IDS.RECRUIT")) {
if slices.Contains(discordMember.Roles, settings.GetString("DISCORD.ROLE_IDS.RECRUIT")) {
mlogger.Debug("is recruit")
member.Rank = ranks.Recruit
}
Expand All @@ -213,6 +217,19 @@ func updateMembers(discordMembers []*discordgo.Member) error {
// fill legacy
member.LegacyEvents = member.Events

// setup member's roles
rankRoles := settings.GetStringMapString("DISCORD.ROLES.RANKS")

if !utils.StringSliceContains(discordMember.Roles, rankRoles[strings.ToLower(member.Rank.String())]) {
for _, id := range rankRoles {
_ = bot.GuildMemberRoleRemove(bot.GuildId, member.Id, id)
}

if !member.IsGuest {
_ = bot.GuildMemberRoleAdd(bot.GuildId, member.Id, rankRoles[strings.ToLower(member.Rank.String())])
}
}

if err := member.Save(); err != nil {
return err
}
Expand Down
16 changes: 8 additions & 8 deletions bot/pkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"github.com/apex/log"
"github.com/bwmarrin/discordgo"
"github.com/pkg/errors"
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/members"
"github.com/sol-armada/admin/settings"
"github.com/sol-armada/admin/utils"
)

Expand Down Expand Up @@ -47,20 +47,20 @@ var attendanceButtonHandlers = map[string]Handler{

func New() (*Bot, error) {
log.Info("creating discord bot")
b, err := discordgo.New(fmt.Sprintf("Bot %s", config.GetString("DISCORD.BOT_TOKEN")))
b, err := discordgo.New(fmt.Sprintf("Bot %s", settings.GetString("DISCORD.BOT_TOKEN")))
if err != nil {
return nil, err
}

if _, err := b.Guild(config.GetString("DISCORD.GUILD_ID")); err != nil {
if _, err := b.Guild(settings.GetString("DISCORD.GUILD_ID")); err != nil {
return nil, err
}

b.Identify.Intents = discordgo.IntentGuildMembers + discordgo.IntentGuildVoiceStates + discordgo.IntentsGuildMessageReactions

bot = &Bot{
config.GetString("DISCORD.GUILD_ID"),
config.GetString("DISCORD.CLIENT_ID"),
settings.GetString("DISCORD.GUILD_ID"),
settings.GetString("DISCORD.CLIENT_ID"),
context.Background(),
b,
}
Expand Down Expand Up @@ -257,7 +257,7 @@ func (b *Bot) Setup() error {
if err := b.DeleteCommand("bank"); err != nil {
log.WithError(err).Error("unable to delete bank command")
}
if config.GetBoolWithDefault("FEATURES.BANK", false) {
if settings.GetBoolWithDefault("FEATURES.BANK", false) {
log.Info("using bank feature")
if _, err := b.ApplicationCommandCreate(b.ClientId, b.GuildId, &discordgo.ApplicationCommand{
Name: "bank",
Expand Down Expand Up @@ -355,7 +355,7 @@ func (b *Bot) Setup() error {
if err := b.DeleteCommand("demerit"); err != nil {
log.WithError(err).Error("unable to delete demerit command")
}
if config.GetBoolWithDefault("FEATURES.MERIT.ENABLED", false) {
if settings.GetBoolWithDefault("FEATURES.MERIT.ENABLED", false) {
log.Info("using merit feature")
if _, err := b.ApplicationCommandCreate(b.ClientId, b.GuildId, &discordgo.ApplicationCommand{
Name: "merit",
Expand Down Expand Up @@ -427,7 +427,7 @@ func (b *Bot) GetEmojis() ([]*discordgo.Emoji, error) {
}

func (b *Bot) DeleteEventMessage(id string) error {
return b.ChannelMessageDelete(config.GetString("DISCORD.CHANNELS.EVENTS"), id)
return b.ChannelMessageDelete(settings.GetString("DISCORD.CHANNELS.EVENTS"), id)
}

func (b *Bot) DeleteCommand(name string) error {
Expand Down
14 changes: 7 additions & 7 deletions bot/take_attendance.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import (
"github.com/pkg/errors"
"github.com/rs/xid"
attdnc "github.com/sol-armada/admin/attendance"
"github.com/sol-armada/admin/config"
"github.com/sol-armada/admin/members"
"github.com/sol-armada/admin/ranks"
"github.com/sol-armada/admin/settings"
"github.com/sol-armada/admin/utils"
)

Expand All @@ -25,7 +25,7 @@ func takeAttendanceAutocompleteHandler(ctx context.Context, s *discordgo.Session
choices := []*discordgo.ApplicationCommandOptionChoice{}
switch {
case data.Options[0].Focused:
channelMessages, err := s.ChannelMessages(config.GetString("FEATURES.ATTENDANCE.CHANNEL_ID"), 5, "", "", "")
channelMessages, err := s.ChannelMessages(settings.GetString("FEATURES.ATTENDANCE.CHANNEL_ID"), 5, "", "", "")
if err != nil {
return errors.Wrap(err, "getting latest attendance messages for autocomplete")
}
Expand Down Expand Up @@ -63,7 +63,7 @@ func takeAttendanceCommandHandler(ctx context.Context, s *discordgo.Session, i *
logger := utils.GetLoggerFromContext(ctx).(*log.Entry)
logger.Debug("taking attendance command")

if !utils.StringSliceContainsOneOf(i.Member.Roles, config.GetStringSlice("ATTENDANCE.ALLOWED_ROLES")) {
if !utils.StringSliceContainsOneOf(i.Member.Roles, settings.GetStringSlice("ATTENDANCE.ALLOWED_ROLES")) {
if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Expand All @@ -88,7 +88,7 @@ func takeAttendanceCommandHandler(ctx context.Context, s *discordgo.Session, i *
Issues: []*attdnc.AttendanceIssue{},
}

channelId := config.GetString("FEATURES.ATTENDANCE.CHANNEL_ID")
channelId := settings.GetString("FEATURES.ATTENDANCE.CHANNEL_ID")

membersList := []*members.Member{}
for _, memberId := range memberIds {
Expand Down Expand Up @@ -230,7 +230,7 @@ func removeAttendanceAutocompleteHandler(ctx context.Context, s *discordgo.Sessi
choices := []*discordgo.ApplicationCommandOptionChoice{}
switch {
case data.Options[0].Focused:
channelMessages, err := s.ChannelMessages(config.GetString("FEATURES.ATTENDANCE.CHANNEL_ID"), 5, "", "", "")
channelMessages, err := s.ChannelMessages(settings.GetString("FEATURES.ATTENDANCE.CHANNEL_ID"), 5, "", "", "")
if err != nil {
return errors.Wrap(err, "getting latest messages for remove auto complete")
}
Expand Down Expand Up @@ -258,7 +258,7 @@ func removeAttendanceCommandHandler(ctx context.Context, s *discordgo.Session, i
logger := utils.GetLoggerFromContext(ctx).(*log.Entry)
logger.Debug("removing attendance command")

if !utils.StringSliceContainsOneOf(i.Member.Roles, config.GetStringSlice("ATTENDANCE.ALLOWED_ROLES")) {
if !utils.StringSliceContainsOneOf(i.Member.Roles, settings.GetStringSlice("ATTENDANCE.ALLOWED_ROLES")) {
logger.Debug("invalid permissions")

if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Expand All @@ -279,7 +279,7 @@ func removeAttendanceCommandHandler(ctx context.Context, s *discordgo.Session, i
eventName := data.Options[0]
userIds := data.Options[1:]

channelId := config.GetString("FEATURES.ATTENDANCE.CHANNEL_ID")
channelId := settings.GetString("FEATURES.ATTENDANCE.CHANNEL_ID")
em, err := s.ChannelMessage(channelId, eventName.StringValue())
if err != nil {
if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Expand Down
Loading

0 comments on commit 5eeafb4

Please sign in to comment.