mirror of
https://github.com/Bubuni-Team/telegram-bot.git
synced 2026-07-31 00:29:24 +03:00
Merge pull request #14 from Bubuni-Team/feature/reputation-improve
Draft: [reputation] /addrep command
This commit is contained in:
@@ -10,7 +10,7 @@ namespace Kruzya.TelegramBot.Core.Service
|
|||||||
public Task<double> GetUserReputationAsync(Chat chat, User user);
|
public Task<double> GetUserReputationAsync(Chat chat, User user);
|
||||||
public Task<double> SetUserReputationAsync(Chat chat, User user, double value);
|
public Task<double> SetUserReputationAsync(Chat chat, User user, double value);
|
||||||
public Task<double> GetReputationDiffAsync(Chat chat, User sender, User receiver);
|
public Task<double> GetReputationDiffAsync(Chat chat, User sender, User receiver);
|
||||||
public Task IncrementReputationAsync(Chat chat, User user, double diff);
|
public Task<double> IncrementReputationAsync(Chat chat, User user, double diff);
|
||||||
public Task<IEnumerable<IReputationEntity>> GetChatRatingAsync(Chat chat, int limit = 10, int offset = 0);
|
public Task<IEnumerable<IReputationEntity>> GetChatRatingAsync(Chat chat, int limit = 10, int offset = 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,24 +128,26 @@ public class Reputation : CommonHandler
|
|||||||
[ParametrizedCommand(InChat.Public, "setrep", CommandParseMode.Both)]
|
[ParametrizedCommand(InChat.Public, "setrep", CommandParseMode.Both)]
|
||||||
public async Task HandleSetRep(double reputation)
|
public async Task HandleSetRep(double reputation)
|
||||||
{
|
{
|
||||||
if (!_userService.IsUserSuper(From))
|
if (!CanModifyUserReputation(RepliedUser))
|
||||||
{
|
|
||||||
_logger.LogInformation("{User} attempted to call /setrep in {Chat}", From, Chat.Title);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RepliedUser == null || RepliedUser.IsBot)
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
reputation = await _reputationService.SetUserReputationAsync(Chat, RepliedUser, reputation);
|
await SendReputationModifyResponse(
|
||||||
await Reply(
|
await _reputationService.SetUserReputationAsync(Chat, RepliedUser, reputation)
|
||||||
new HtmlString()
|
);
|
||||||
.Code("Пользователю ")
|
}
|
||||||
.UserMention(RepliedUser)
|
|
||||||
.Code($" установлена репутация: {reputation}")
|
[ParametrizedCommand(InChat.Public, "addrep", CommandParseMode.Both)]
|
||||||
.ToString()
|
public async Task HandleAddRep(double reputation)
|
||||||
|
{
|
||||||
|
if (!CanModifyUserReputation(RepliedUser))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await SendReputationModifyResponse(
|
||||||
|
await _reputationService.IncrementReputationAsync(Chat, RepliedUser, reputation)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +160,9 @@ public class Reputation : CommonHandler
|
|||||||
foreach (var rep in await _reputationService.GetChatRatingAsync(Chat))
|
foreach (var rep in await _reputationService.GetChatRatingAsync(Chat))
|
||||||
{
|
{
|
||||||
var user = await _userService.GetUser(rep.UserId, rep.ChatId);
|
var user = await _userService.GetUser(rep.UserId, rep.ChatId);
|
||||||
msg.Text($"{i}. ").UserMention(user).Text($" ({rep.Value})").Br();
|
msg.Text($"{i}. ")
|
||||||
|
.Text($"{user.FirstName} {user.LastName}".Trim().HtmlEncode())
|
||||||
|
.Text($" ({rep.Value})").Br();
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,6 +170,28 @@ public class Reputation : CommonHandler
|
|||||||
disableNotification: true);
|
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<double> GetUserReputation(User user)
|
private async Task<double> GetUserReputation(User user)
|
||||||
{
|
{
|
||||||
return await _reputationService.GetUserReputationAsync(Chat, user);
|
return await _reputationService.GetUserReputationAsync(Chat, user);
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ public class ReputationService : IReputation
|
|||||||
return rep.Value;
|
return rep.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task IncrementReputationAsync(Chat chat, User user, double diff)
|
public async Task<double> 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<double> GetReputationDiffAsync(Chat chat, User sender, User receiver)
|
public async Task<double> GetReputationDiffAsync(Chat chat, User sender, User receiver)
|
||||||
|
|||||||
Reference in New Issue
Block a user