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)); }
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}"); }
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); }
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 })); }