Skip to content

Commit

Permalink
fix 修正排行榜排序
Browse files Browse the repository at this point in the history
feat 新增查看自己的排名
  • Loading branch information
chr233 committed Oct 25, 2022
1 parent 58bc1b1 commit dc3abdf
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 10 deletions.
4 changes: 2 additions & 2 deletions XinjingdailyBot/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.Reflection;

[assembly: CLSCompliant(false)]
[assembly: AssemblyVersion("1.0.11.692")]
[assembly: AssemblyFileVersion("1.0.11.692")]
[assembly: AssemblyVersion("1.0.11.694")]
[assembly: AssemblyFileVersion("1.0.11.694")]

[assembly: AssemblyCopyright("Copyright @ 2022 Chr_")]
[assembly: AssemblyProduct("XinjingDaily Bot")]
Expand Down
28 changes: 21 additions & 7 deletions XinjingdailyBot/Handlers/Messages/Commands/AdminCmd.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,15 @@ internal static async Task ResponseUserInfo(ITelegramBotClient botClient, Messag
}
string status = targetUser.IsBan ? "封禁中" : "正常";

int totalPost = targetUser.PostCount - targetUser.ExpiredPostCount;

sb.AppendLine($"用户名: <code>{userNick}</code>");
sb.AppendLine($"用户ID: <code>{targetUser.UserID}</code>");
sb.AppendLine($"用户组: <code>{group}</code>");
sb.AppendLine($"状态: <code>{status}</code>");
sb.AppendLine($"等级: <code>{level}</code>");
sb.AppendLine($"投稿数量: <code>{targetUser.PostCount}</code>");
sb.AppendLine($"投稿数量: <code>{totalPost}</code>");
sb.AppendLine($"通过率: <code>{100.0 * targetUser.AcceptCount / totalPost}%</code>");
sb.AppendLine($"通过数量: <code>{targetUser.AcceptCount}</code>");
sb.AppendLine($"拒绝数量: <code>{targetUser.RejetCount}</code>");
sb.AppendLine($"审核数量: <code>{targetUser.ReviewCount}</code>");
Expand Down Expand Up @@ -735,17 +738,26 @@ internal static async Task ResponseInviteToReviewGroup(ITelegramBotClient botCli
}
}

/// <summary>
/// 查看用户排行榜
/// </summary>
/// <param name="botClient"></param>
/// <param name="dbUser"></param>
/// <param name="message"></param>
/// <returns></returns>
internal static async Task ResponseUserRank(ITelegramBotClient botClient, Users dbUser, Message message)
{
DateTime now = DateTime.Now;
DateTime prev30Days = now.AddDays(-30).AddHours(-now.Hour).AddMinutes(-now.Minute).AddSeconds(-now.Second);

const int topCount = 5;
const int topCount = 8;
const int miniumPost = 10;

StringBuilder sb = new();

sb.AppendLine($"-- 用户投稿数量排名 --");
var userAcceptCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID == 1 && x.ModifyAt >= prev30Days).OrderByDescending(x => x.AcceptCount).Take(topCount).ToListAsync();
var userAcceptCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID == 1 && x.AcceptCount > miniumPost && x.ModifyAt >= prev30Days)
.OrderByDescending(x => x.AcceptCount).Take(topCount).ToListAsync();
if (userAcceptCountRank?.Count > 0)
{
int count = 1;
Expand All @@ -760,15 +772,15 @@ internal static async Task ResponseUserRank(ITelegramBotClient botClient, Users
}

sb.AppendLine($"-- 用户投稿通过率排名 --");
var userAcceptRatioRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID == 1 && x.AcceptCount > 10 && x.ModifyAt >= prev30Days)
var userAcceptRatioRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID == 1 && x.AcceptCount > miniumPost && x.ModifyAt >= prev30Days)
.Select(y => new { User = y, Ratio = 100.0 * y.AcceptCount / y.PostCount }).OrderByDescending(x => x.Ratio).Take(topCount).ToListAsync();
if (userAcceptRatioRank?.Count > 0)
{
int count = 1;
foreach (var data in userAcceptRatioRank)
{
var user = data.User;
sb.AppendLine($"{count++}. {(!user.PreferAnymouse ? user.UserNick : "匿名用户")} {data.Ratio.ToString("0.00")}%");
sb.AppendLine($"{count++}. {(!user.PreferAnymouse ? user.UserNick : "匿名用户")} {user.AcceptCount} / {user.PostCount} {data.Ratio.ToString("0.00")}%");
}
}
else
Expand All @@ -777,7 +789,8 @@ internal static async Task ResponseUserRank(ITelegramBotClient botClient, Users
}

sb.AppendLine($"-- 管理员投稿数量排名 --");
var adminAcceptCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID > 1 && x.ModifyAt >= prev30Days).OrderByDescending(x => x.AcceptCount).Take(topCount).ToListAsync();
var adminAcceptCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID > 1 && x.AcceptCount > miniumPost && x.ModifyAt >= prev30Days)
.OrderByDescending(x => x.AcceptCount).Take(topCount).ToListAsync();
if (adminAcceptCountRank?.Count > 0)
{
int count = 1;
Expand All @@ -792,7 +805,8 @@ internal static async Task ResponseUserRank(ITelegramBotClient botClient, Users
}

sb.AppendLine($"-- 管理员审核数量排名 --");
var adminReviewCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID > 1 && x.ModifyAt >= prev30Days).OrderByDescending(x => x.AcceptCount).Take(topCount).ToListAsync();
var adminReviewCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID > 1 && x.ReviewCount > miniumPost && x.ModifyAt >= prev30Days)
.OrderByDescending(x => x.ReviewCount).Take(topCount).ToListAsync();
if (adminReviewCountRank?.Count > 0)
{
int count = 1;
Expand Down
38 changes: 37 additions & 1 deletion XinjingdailyBot/Handlers/Messages/Commands/NormalCmd.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,51 @@ internal static async Task ResponseMyInfo(ITelegramBotClient botClient, Users db
group = g.Name;
}

int totalPost = dbUser.PostCount - dbUser.ExpiredPostCount;

StringBuilder sb = new();

sb.AppendLine($"-- 基础信息 --");
sb.AppendLine($"用户名: <code>{userNick}</code>");
sb.AppendLine($"用户ID: <code>{dbUser.UserID}</code>");
sb.AppendLine($"用户组: <code>{group}</code>");
sb.AppendLine($"等级: <code>{level}</code>");
sb.AppendLine($"投稿数量: <code>{dbUser.PostCount - dbUser.ExpiredPostCount}</code>");
sb.AppendLine($"投稿数量: <code>{totalPost}</code>");
sb.AppendLine($"通过率: <code>{(100.0 * dbUser.AcceptCount / totalPost).ToString("0.00")}%</code>");
sb.AppendLine($"通过数量: <code>{dbUser.AcceptCount}</code>");
sb.AppendLine($"拒绝数量: <code>{dbUser.RejetCount}</code>");
sb.AppendLine($"审核数量: <code>{dbUser.ReviewCount}</code>");
sb.AppendLine($"-- 用户排名 --");

DateTime now = DateTime.Now;
DateTime prev30Days = now.AddDays(-30).AddHours(-now.Hour).AddMinutes(-now.Minute).AddSeconds(-now.Second);

if (dbUser.AcceptCount > 10 && dbUser.GroupID == 1)
{
int activeUser = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.ModifyAt >= prev30Days).CountAsync();
int acceptCountRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID == 1 && x.AcceptCount > dbUser.AcceptCount && x.ModifyAt >= prev30Days).CountAsync() + 1;

double ratio = 1.0 * dbUser.AcceptCount / dbUser.PostCount;

int acceptRatioRank = await DB.Queryable<Users>().Where(x => !x.IsBan && !x.IsBot && x.GroupID == 1 && x.AcceptCount > 10 && x.ModifyAt >= prev30Days)
.Select(y => new { Ratio = y.AcceptCount / y.PostCount }).Where(x => x.Ratio > ratio).CountAsync() + 1;

sb.AppendLine($"通过数量: <code>{acceptCountRank}</code>");
sb.AppendLine($"通过率: <code>{acceptRatioRank}</code>");
sb.AppendLine($"活跃用户: <code>{activeUser}</code>");
}
else
{
if (dbUser.GroupID != 1)
{
sb.AppendLine($"管理员不参与用户排名");
sb.AppendLine($"可以使用命令 /userrank 查看管理员排名");
}
else
{
sb.AppendLine("稿件数量太少, 未进入排行榜");
}
}

await botClient.SendCommandReply(sb.ToString(), message, parsemode: ParseMode.Html);
}
Expand Down

0 comments on commit dc3abdf

Please sign in to comment.