From 4accf36ffa5c9726afaa4b9e91164dc6dee1f326 Mon Sep 17 00:00:00 2001 From: West14 <30056636+West14@users.noreply.github.com> Date: Sat, 23 Apr 2022 21:42:17 +0300 Subject: [PATCH] [reputation] /addrep command --- Core/Service/IReputation.cs | 2 +- modules/Reputation/Handler/Reputation.cs | 52 ++++++++++++++----- .../Reputation/Service/ReputationService.cs | 4 +- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/Core/Service/IReputation.cs b/Core/Service/IReputation.cs index ab1472d..30181be 100644 --- a/Core/Service/IReputation.cs +++ b/Core/Service/IReputation.cs @@ -10,7 +10,7 @@ namespace Kruzya.TelegramBot.Core.Service public Task GetUserReputationAsync(Chat chat, User user); public Task SetUserReputationAsync(Chat chat, User user, double value); public Task GetReputationDiffAsync(Chat chat, User sender, User receiver); - public Task IncrementReputationAsync(Chat chat, User user, double diff); + public Task IncrementReputationAsync(Chat chat, User user, double diff); public Task> GetChatRatingAsync(Chat chat, int limit = 10, int offset = 0); } } diff --git a/modules/Reputation/Handler/Reputation.cs b/modules/Reputation/Handler/Reputation.cs index 5c694da..8ee3e18 100644 --- a/modules/Reputation/Handler/Reputation.cs +++ b/modules/Reputation/Handler/Reputation.cs @@ -128,27 +128,29 @@ public class Reputation : CommonHandler [ParametrizedCommand(InChat.Public, "setrep", CommandParseMode.Both)] public async Task HandleSetRep(double reputation) { - if (!_userService.IsUserSuper(From)) - { - _logger.LogInformation("{User} attempted to call /setrep in {Chat}", From, Chat.Title); - return; - } - - if (RepliedUser == null || RepliedUser.IsBot) + if (!CanModifyUserReputation(RepliedUser)) { return; } - reputation = await _reputationService.SetUserReputationAsync(Chat, RepliedUser, reputation); - await Reply( - new HtmlString() - .Code("Пользователю ") - .UserMention(RepliedUser) - .Code($" установлена репутация: {reputation}") - .ToString() + await SendReputationModifyResponse( + await _reputationService.SetUserReputationAsync(Chat, RepliedUser, reputation) ); } + [ParametrizedCommand(InChat.Public, "addrep", CommandParseMode.Both)] + public async Task HandleAddRep(double reputation) + { + if (!CanModifyUserReputation(RepliedUser)) + { + return; + } + + await SendReputationModifyResponse( + await _reputationService.IncrementReputationAsync(Chat, RepliedUser, reputation) + ); + } + [Command(InChat.Public, "top", CommandParseMode.Both)] public async Task HandleTop() { @@ -166,6 +168,28 @@ public class Reputation : CommonHandler disableNotification: true); } + private async Task SendReputationModifyResponse(double reputation) + { + await Reply( + new HtmlString() + .Code("Пользователю ") + .UserMention(RepliedUser) + .Code($" установлена репутация: {reputation}") + .ToString() + ); + } + + private bool CanModifyUserReputation(User? user) + { + if (!_userService.IsUserSuper(From)) + { + _logger.LogInformation("{User} attempted to modify someones reputation in {Chat}", From, Chat.Title); + return false; + } + + return user is {IsBot: false}; + } + private async Task GetUserReputation(User user) { return await _reputationService.GetUserReputationAsync(Chat, user); diff --git a/modules/Reputation/Service/ReputationService.cs b/modules/Reputation/Service/ReputationService.cs index d3877b0..2a3c667 100644 --- a/modules/Reputation/Service/ReputationService.cs +++ b/modules/Reputation/Service/ReputationService.cs @@ -37,9 +37,9 @@ public class ReputationService : IReputation return rep.Value; } - public async Task IncrementReputationAsync(Chat chat, User user, double diff) + public async Task IncrementReputationAsync(Chat chat, User user, double diff) { - await SetUserReputationAsync(chat, user, await GetUserReputationAsync(chat, user) + diff); + return await SetUserReputationAsync(chat, user, await GetUserReputationAsync(chat, user) + diff); } public async Task GetReputationDiffAsync(Chat chat, User sender, User receiver)