Ejemplo n.º 1
0
        public override async Task <PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services)
        {
            if (await RiftBot.IsModeratorAsync(context.User) || RiftBot.IsAdmin(context.User))
            {
                return(PreconditionResult.FromSuccess());
            }

            return(PreconditionResult.FromError(RiftBot.CommandDenyMessage));
        }
Ejemplo n.º 2
0
        public async Task BanAsync(IUser target, string reason, IUser moderator)
        {
            (var passed, var sgTarget) = await ValidateAsync(target, reason, moderator);

            if (!passed)
            {
                return;
            }

            if (RiftBot.IsAdmin(sgTarget) || await RiftBot.IsModeratorAsync(sgTarget))
            {
                await messageService.SendMessageAsync("mod-friendly-fire", Settings.ChannelId.Commands, new FormatData(moderator.Id));

                return;
            }

            if (!IonicHelper.GetGuild(Settings.App.MainGuildId, out var guild))
            {
                return;
            }

            await DB.ModerationLogs.AddAsync(sgTarget.Id, moderator.Id, "Ban", reason, DateTime.UtcNow, TimeSpan.Zero);

            (var oldToxicity, var newToxicity) = await GetNewToxicityAsync(sgTarget.Id, ToxicitySource.Ban);

            await DB.Toxicity.UpdatePercentAsync(sgTarget.Id, newToxicity.Percent);

            var data = new FormatData(target.Id)
            {
                Moderation = new ModerationData
                {
                    ModeratorId = moderator.Id,
                    TargetId    = sgTarget.Id,
                    Reason      = reason,
                }
            };

            await messageService.SendMessageAsync("mod-ban-success", Settings.ChannelId.Chat, data);

            await guild.AddBanAsync(sgTarget, 1, $"Banned by {moderator}: {reason}");
        }
Ejemplo n.º 3
0
        public async Task MuteAsync(IUser target, string reason, string time, IUser moderator)
        {
            (var passed, var sgTarget) = await ValidateAsync(target, reason, moderator);

            if (!passed)
            {
                return;
            }

            if (RiftBot.IsAdmin(sgTarget) || await RiftBot.IsModeratorAsync(sgTarget))
            {
                await messageService.SendMessageAsync("mod-friendly-fire", Settings.ChannelId.Commands, new FormatData(moderator.Id));

                return;
            }

            if (!int.TryParse(time.Remove(time.Length - 1), out var timeInt))
            {
                await messageService.SendMessageAsync("mod-wrong-time-format", Settings.ChannelId.Commands, new FormatData(moderator.Id));

                return;
            }

            TimeSpan ts;

            var timeMod = time.Last();

            switch (timeMod)
            {
            case 's':
                ts = TimeSpan.FromSeconds(timeInt);
                break;

            case 'm':
                ts = TimeSpan.FromMinutes(timeInt);
                break;

            case 'h':
                ts = TimeSpan.FromHours(timeInt);
                break;

            case 'd':
                ts = TimeSpan.FromDays(timeInt);
                break;

            default:
                await messageService.SendMessageAsync("mod-wrong-time-format", Settings.ChannelId.Commands, new FormatData(moderator.Id));

                return;
            }

            var muted = await DB.Roles.GetAsync(40);

            await roleService.AddTempRoleAsync(sgTarget.Id, muted.RoleId, ts,
                                               $"Muted by {moderator}|{moderator.Id.ToString()} with reason: {reason}");

            await DB.ModerationLogs.AddAsync(sgTarget.Id, moderator.Id, "Mute", reason, DateTime.UtcNow, ts);

            (var oldToxicity, var newToxicity) = await GetNewToxicityAsync(sgTarget.Id, ToxicitySource.Mute);

            await DB.Toxicity.UpdatePercentAsync(sgTarget.Id, newToxicity.Percent);

            if (newToxicity.Level > oldToxicity.Level)
            {
                await messageService.SendMessageAsync("mod-toxicity-increased", Settings.ChannelId.Chat, new FormatData(sgTarget.Id));
            }

            var data = new FormatData(sgTarget.Id)
            {
                Moderation = new ModerationData
                {
                    TargetId    = sgTarget.Id,
                    ModeratorId = moderator.Id,
                    Reason      = reason,
                    Duration    = ts
                }
            };

            await messageService.SendMessageAsync("mod-mute-success", Settings.ChannelId.Chat, data);
        }
Ejemplo n.º 4
0
        async Task <IonicMessage> GiftAsync(SocketGuildUser fromSgUser, SocketGuildUser toSgUser)
        {
            var senderId   = fromSgUser.Id;
            var receiverId = toSgUser.Id;

            if (toSgUser.IsBot)
            {
                RiftBot.Log.Debug("[Gift] Target is bot.");
                return(await messageService.GetMessageAsync("gift-target-bot", new FormatData(senderId)));
            }

            if (fromSgUser.Id == toSgUser.Id)
            {
                RiftBot.Log.Debug("[Gift] Ouch, self-gift.");
                return(await messageService.GetMessageAsync("gift-target-self", new FormatData(senderId)));
            }

            (var canGift, var remainingTime) = await CanGift(senderId);

            if (!canGift)
            {
                return(await messageService.GetMessageAsync("gift-cooldown", new FormatData(senderId)
                {
                    Gift = new GiftData
                    {
                        Cooldown = remainingTime
                    }
                }));
            }

            var dbInventory = await DB.Inventory.GetAsync(senderId);

            if (dbInventory.Coins < Settings.Economy.GiftPrice)
            {
                return(await messageService.GetMessageAsync("gift-nocoins", new FormatData(senderId)
                {
                    Gift = new GiftData
                    {
                        NecessaryCoins = Settings.Economy.GiftPrice - dbInventory.Coins
                    }
                }));
            }

            await DB.Inventory.RemoveAsync(senderId, new InventoryData { Coins = Settings.Economy.GiftPrice });

            var giftItem = new GiftReward();
            await rewardService.DeliverToAsync(receiverId, giftItem);

            GiftSent?.Invoke(null, new GiftSentEventArgs(senderId, receiverId));
            GiftReceived?.Invoke(null, new GiftReceivedEventArgs(senderId, fromSgUser.Id));

            if (toSgUser.Id == 178443743026872321ul)
            {
                GiftedFounder?.Invoke(null, new GiftedFounderEventArgs(receiverId, senderId));
            }

            var developers = await DB.Roles.GetAsync(44);

            if (IonicHelper.HasRolesAny(toSgUser, developers.RoleId))
            {
                GiftedDeveloper?.Invoke(null, new GiftedDeveloperEventArgs(senderId, receiverId));
            }

            if (await RiftBot.IsModeratorAsync(toSgUser))
            {
                GiftedModerator?.Invoke(null, new GiftedModeratorEventArgs(senderId, receiverId));
            }

            if (!(await DB.Streamers.GetAsync(receiverId) is null))
            {
                GiftedStreamer?.Invoke(null, new GiftedStreamerEventArgs(senderId, receiverId));
            }

            RiftBot.Log.Debug("[Gift] Success.");

            await DB.Cooldowns.SetLastGiftTimeAsync(senderId, DateTime.UtcNow);

            await DB.Statistics.AddAsync(senderId, new StatisticData { GiftsSent = 1u });

            await DB.Statistics.AddAsync(receiverId, new StatisticData { GiftsReceived = 1u });

            return(await messageService.GetMessageAsync("gift-success", new FormatData(senderId)
            {
                Gift = new GiftData
                {
                    TargetId = receiverId
                },
                Reward = giftItem
            }));
        }