Beispiel #1
0
        public void GetByID_OneItem_ReturnsGuildTask()
        {
            // Arrange
            GuildTask entity = new GuildTask {
                ID = 1
            };

            // Act
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity));

            // Assert
            Assert.AreNotSame(entity, _cache.GetByID(1));
        }
Beispiel #2
0
        public void GetByID_TwoItems_ReturnsCorrectObject()
        {
            // Arrange
            GuildTask entity1 = new GuildTask {
                ID = 1
            };
            GuildTask entity2 = new GuildTask {
                ID = 2
            };

            // Act
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity1));
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity2));

            // Assert
            Assert.AreNotSame(entity1, _cache.GetByID(1));
            Assert.AreNotSame(entity2, _cache.GetByID(2));
        }
Beispiel #3
0
        public void GetByID_RemovedItem_ReturnsCorrectObject()
        {
            // Arrange
            GuildTask entity1 = new GuildTask {
                ID = 1
            };
            GuildTask entity2 = new GuildTask {
                ID = 2
            };

            // Act
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity1));
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity2));
            MessageHub.Instance.Publish(new OnCacheObjectDeleted <GuildTask>(entity1));

            // Assert
            Assert.Throws <KeyNotFoundException>(() => { _cache.GetByID(1); });
            Assert.AreNotSame(entity2, _cache.GetByID(2));
        }
Beispiel #4
0
        public void GetByID_NoItems_ThrowsKeyNotFoundException()
        {
            // Arrange
            GuildTask entity1 = new GuildTask {
                ID = 1
            };
            GuildTask entity2 = new GuildTask {
                ID = 2
            };

            // Act
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity1));
            MessageHub.Instance.Publish(new OnCacheObjectSet <GuildTask>(entity2));
            MessageHub.Instance.Publish(new OnCacheObjectDeleted <GuildTask>(entity1));
            MessageHub.Instance.Publish(new OnCacheObjectDeleted <GuildTask>(entity2));

            // Assert
            Assert.Throws <KeyNotFoundException>(() => { _cache.GetByID(1); });
            Assert.Throws <KeyNotFoundException>(() => { _cache.GetByID(2); });
        }
        public async Task PunishMemberAsync(DiscordGuild guild, DiscordMember member, PunishmentAction type, TimeSpan?cooldown = null, string?reason = null)
        {
            Log.Debug("Punishing {Member} in guild {Guild} with action {ActionType} due to: {Reason}", member, guild, type, reason ?? this.reason);
            try {
                DiscordRole muteRole;
                GuildTask   gt;
                switch (type)
                {
                case PunishmentAction.Kick:
                    await member.RemoveAsync(reason ?? this.reason);

                    break;

                case PunishmentAction.PermanentMute:
                    muteRole = await this.GetOrCreateMuteRoleAsync(guild);

                    if (member.Roles.Contains(muteRole))
                    {
                        return;
                    }
                    await member.GrantRoleAsync(muteRole, reason ?? this.reason);

                    break;

                case PunishmentAction.PermanentBan:
                    await member.BanAsync(1, reason : reason ?? this.reason);

                    break;

                case PunishmentAction.TemporaryBan:
                    await member.BanAsync(0, reason : reason ?? this.reason);

                    gt = new GuildTask {
                        ExecutionTime = DateTimeOffset.Now + (cooldown ?? TimeSpan.FromDays(1)),
                        GuildId       = guild.Id,
                        UserId        = member.Id,
                        Type          = ScheduledTaskType.Unban,
                    };
                    await this.ss.ScheduleAsync(gt);

                    break;

                case PunishmentAction.TemporaryMute:
                    muteRole = await this.GetOrCreateMuteRoleAsync(guild);

                    if (member.Roles.Contains(muteRole))
                    {
                        return;
                    }
                    await member.GrantRoleAsync(muteRole, reason ?? this.reason);

                    gt = new GuildTask {
                        ExecutionTime = DateTimeOffset.Now + (cooldown ?? TimeSpan.FromHours(1)),
                        GuildId       = guild.Id,
                        RoleId        = muteRole.Id,
                        UserId        = member.Id,
                        Type          = ScheduledTaskType.Unmute,
                    };
                    await this.ss.ScheduleAsync(gt);

                    break;
                }
            } catch {
                if (this.ls.IsLogEnabledFor(guild.Id, out LocalizedEmbedBuilder emb))
                {
                    emb.WithLocalizedTitle("err-punish-failed");
                    emb.WithColor(DiscordColor.Red);
                    emb.AddLocalizedTitleField("str-user", member);
                    emb.AddLocalizedTitleField("str-rsn", reason ?? this.reason);
                    await this.ls.LogAsync(guild, emb.Build());
                }
            }
        }