Add RequestContext.SendMessage + Silent messages

This commit is contained in:
Nikolay Kochulin 2019-12-08 20:34:03 +00:00
parent fdbeec4ea4
commit 7843a60fd9
8 changed files with 37 additions and 73 deletions

View File

@ -28,13 +28,13 @@ namespace JetKarmaBot.Commands
{ {
if (recipientId != default(int)) if (recipientId != default(int))
{ {
await ctx.Client.SendTextMessageAsync(ctx.EventArgs.Message.Chat.Id, currentLocale["jetkarmabot.award.errdup"]); await ctx.SendMessage(currentLocale["jetkarmabot.award.errdup"]);
return false; return false;
} }
recipientId = await db.Users.Where(x => x.Username == arg).Select(x => x.UserId).FirstOrDefaultAsync(); recipientId = await db.Users.Where(x => x.Username == arg).Select(x => x.UserId).FirstOrDefaultAsync();
if (recipientId == default(int)) if (recipientId == default(int))
{ {
await ctx.Client.SendTextMessageAsync(ctx.EventArgs.Message.Chat.Id, currentLocale["jetkarmabot.award.errbadusername"]); await ctx.SendMessage(currentLocale["jetkarmabot.award.errbadusername"]);
return false; return false;
} }
} }
@ -44,7 +44,7 @@ namespace JetKarmaBot.Commands
awardTypeText = arg; awardTypeText = arg;
else else
{ {
await ctx.Client.SendTextMessageAsync(ctx.EventArgs.Message.Chat.Id, currentLocale["jetkarmabot.award.errdup"]); await ctx.SendMessage(currentLocale["jetkarmabot.award.errdup"]);
return false; return false;
} }
} }
@ -57,7 +57,7 @@ namespace JetKarmaBot.Commands
if (recipientId == default(int)) if (recipientId == default(int))
{ {
await ctx.Client.SendTextMessageAsync(ctx.EventArgs.Message.Chat.Id, currentLocale["jetkarmabot.award.errawardnoreply"]); await ctx.SendMessage(currentLocale["jetkarmabot.award.errawardnoreply"]);
return false; return false;
} }
@ -66,21 +66,15 @@ namespace JetKarmaBot.Commands
if (awarder.Id == recipientId) if (awarder.Id == recipientId)
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(currentLocale["jetkarmabot.award.errawardself"]);
ctx.EventArgs.Message.Chat.Id,
currentLocale["jetkarmabot.award.errawardself"],
replyToMessageId: ctx.EventArgs.Message.MessageId);
return false; return false;
} }
if (ctx.GetFeature<ChatCommandRouter.Feature>().Router.Me.Id == recipientId) if (ctx.GetFeature<ChatCommandRouter.Feature>().Router.Me.Id == recipientId)
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(awarding
ctx.EventArgs.Message.Chat.Id,
awarding
? currentLocale["jetkarmabot.award.errawardbot"] ? currentLocale["jetkarmabot.award.errawardbot"]
: currentLocale["jetkarmabot.award.errrevokebot"], : currentLocale["jetkarmabot.award.errrevokebot"]);
replyToMessageId: ctx.EventArgs.Message.MessageId);
return false; return false;
} }
@ -113,10 +107,7 @@ namespace JetKarmaBot.Commands
var response = message + "\n" + String.Format(currentLocale["jetkarmabot.award.statustext"], recUserName, prevCount + (awarding ? 1 : -1), awardType.Symbol); var response = message + "\n" + String.Format(currentLocale["jetkarmabot.award.statustext"], recUserName, prevCount + (awarding ? 1 : -1), awardType.Symbol);
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(response);
ctx.EventArgs.Message.Chat.Id,
response,
replyToMessageId: ctx.EventArgs.Message.MessageId);
return true; return true;
} }

View File

@ -21,27 +21,18 @@ namespace JetKarmaBot.Commands
var currentLocale = Locale[(await db.Chats.FindAsync(ctx.EventArgs.Message.Chat.Id)).Locale]; var currentLocale = Locale[(await db.Chats.FindAsync(ctx.EventArgs.Message.Chat.Id)).Locale];
if (cmd.Parameters.Length < 1) if (cmd.Parameters.Length < 1)
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(currentLocale["jetkarmabot.changelocale.getlocale"]);
args.Message.Chat.Id,
currentLocale["jetkarmabot.changelocale.getlocale"],
replyToMessageId: args.Message.MessageId);
return false; return false;
} }
else if (cmd.Parameters[0] == "list") else if (cmd.Parameters[0] == "list")
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(currentLocale["jetkarmabot.changelocale.listalltext"] + "\n"
args.Message.Chat.Id, + string.Join("\n", Locale.Select(a => a.Key)));
currentLocale["jetkarmabot.changelocale.listalltext"] + "\n"
+ string.Join("\n", Locale.Select(a => a.Key)),
replyToMessageId: args.Message.MessageId);
return false; return false;
} }
else if (cmd.Parameters[0] == "all") else if (cmd.Parameters[0] == "all")
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(currentLocale["jetkarmabot.changelocale.errorall"]);
args.Message.Chat.Id,
currentLocale["jetkarmabot.changelocale.errorall"],
replyToMessageId: args.Message.MessageId);
return false; return false;
} }
string localeId; string localeId;
@ -54,10 +45,9 @@ namespace JetKarmaBot.Commands
} }
catch (LocalizationException e) catch (LocalizationException e)
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(
args.Message.Chat.Id, currentLocale["jetkarmabot.changelocale.toomany"] + "\n"
currentLocale["jetkarmabot.changelocale.toomany"] + "\n" + string.Join("\n", (e.Data["LocaleNames"] as Locale[]).Select(x => x.Name)), + string.Join("\n", (e.Data["LocaleNames"] as Locale[]).Select(x => x.Name)));
replyToMessageId: args.Message.MessageId);
return false; return false;
} }
(await db.Chats.FindAsync(args.Message.Chat.Id)).Locale = localeId; (await db.Chats.FindAsync(args.Message.Chat.Id)).Locale = localeId;
@ -65,11 +55,9 @@ namespace JetKarmaBot.Commands
currentLocale = Locale[localeId]; currentLocale = Locale[localeId];
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(
args.Message.Chat.Id, (currentLocale.HasNote ? currentLocale["jetkarmabot.changelocale.beforenote"] + currentLocale.Note + "\n" : "")
(currentLocale.HasNote ? currentLocale["jetkarmabot.changelocale.beforenote"] + currentLocale.Note + "\n" : "") + currentLocale["jetkarmabot.changelocale.justchanged"]);
+ currentLocale["jetkarmabot.changelocale.justchanged"],
replyToMessageId: args.Message.MessageId);
return true; return true;
} }

View File

@ -23,13 +23,10 @@ namespace JetKarmaBot.Commands
{ {
var db = ctx.Database; var db = ctx.Database;
var currentLocale = Locale[(await db.Chats.FindAsync(ctx.EventArgs.Message.Chat.Id)).Locale]; var currentLocale = Locale[(await db.Chats.FindAsync(ctx.EventArgs.Message.Chat.Id)).Locale];
string resp = currentLocale["jetkarmabot.currencies.listtext"] + "\n" + string.Join("\n", await ctx.SendMessage(
(await db.AwardTypes.ToListAsync()).Select(x => $"{x.Symbol} ({x.CommandName}) <i>{currentLocale["jetkarmabot.awardtypes.nominative." + x.CommandName]}</i>")); currentLocale["jetkarmabot.currencies.listtext"] + "\n" + string.Join("\n",
await ctx.Client.SendTextMessageAsync( (await db.AwardTypes.ToListAsync())
ctx.EventArgs.Message.Chat.Id, .Select(x => $"{x.Symbol} ({x.CommandName}) <i>{currentLocale["jetkarmabot.awardtypes.nominative." + x.CommandName]}</i>")));
resp,
replyToMessageId: ctx.EventArgs.Message.MessageId,
parseMode: ParseMode.Html);
return true; return true;
} }
} }

View File

@ -31,20 +31,12 @@ namespace JetKarmaBot.Commands
var router = ctx.GetFeature<ChatCommandRouter.Feature>().Router; var router = ctx.GetFeature<ChatCommandRouter.Feature>().Router;
if (ctx.Command.Parameters.Length < 1) if (ctx.Command.Parameters.Length < 1)
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(router.GetHelpText(currentLocale));
ctx.EventArgs.Message.Chat.Id,
router.GetHelpText(currentLocale),
replyToMessageId: ctx.EventArgs.Message.MessageId,
parseMode: ParseMode.Html);
return true; return true;
} }
else else
{ {
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(router.GetHelpTextFor(ctx.Command.Parameters[0], currentLocale));
ctx.EventArgs.Message.Chat.Id,
router.GetHelpTextFor(ctx.Command.Parameters[0], currentLocale),
replyToMessageId: ctx.EventArgs.Message.MessageId,
parseMode: ParseMode.Html);
return true; return true;
} }
} }

View File

@ -18,8 +18,6 @@ namespace JetKarmaBot.Commands
var asker = ctx.EventArgs.Message.From; var asker = ctx.EventArgs.Message.From;
var awardTypeName = ctx.Command.Parameters.FirstOrDefault(); var awardTypeName = ctx.Command.Parameters.FirstOrDefault();
string response;
if (string.IsNullOrWhiteSpace(awardTypeName)) if (string.IsNullOrWhiteSpace(awardTypeName))
awardTypeName = "star"; awardTypeName = "star";
@ -29,7 +27,7 @@ namespace JetKarmaBot.Commands
var awardTypeId = await awardTypeIdQuery.FirstAsync(); var awardTypeId = await awardTypeIdQuery.FirstAsync();
var awardType = await db.AwardTypes.FindAsync(awardTypeId); var awardType = await db.AwardTypes.FindAsync(awardTypeId);
response = string.Format(currentLocale["jetkarmabot.leaderboard.specifictext"], awardType.Symbol) + "\n" + string.Join('\n', await ctx.SendMessage(string.Format(currentLocale["jetkarmabot.leaderboard.specifictext"], awardType.Symbol) + "\n" + string.Join('\n',
await Task.WhenAll((await db.Awards await Task.WhenAll((await db.Awards
.Where(x => x.ChatId == ctx.EventArgs.Message.Chat.Id && x.AwardTypeId == awardTypeId) .Where(x => x.ChatId == ctx.EventArgs.Message.Chat.Id && x.AwardTypeId == awardTypeId)
.GroupBy(x => x.ToId) .GroupBy(x => x.ToId)
@ -38,12 +36,7 @@ namespace JetKarmaBot.Commands
.Take(5) .Take(5)
.ToListAsync()) .ToListAsync())
.Select(async (x, index) => $"{index + 1}. {(await db.Users.FindAsync(x.UserId)).Username} - {x.Amount}")) .Select(async (x, index) => $"{index + 1}. {(await db.Users.FindAsync(x.UserId)).Username} - {x.Amount}"))
); ));
await ctx.Client.SendTextMessageAsync(
ctx.EventArgs.Message.Chat.Id,
response,
replyToMessageId: ctx.EventArgs.Message.MessageId);
return true; return true;
} }

View File

@ -60,10 +60,7 @@ namespace JetKarmaBot.Commands
.SumAsync(x => x.Amount), awardType.Symbol); .SumAsync(x => x.Amount), awardType.Symbol);
} }
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(response);
ctx.EventArgs.Message.Chat.Id,
response,
replyToMessageId: ctx.EventArgs.Message.MessageId);
return true; return true;
} }

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using JetKarmaBot.Commands; using JetKarmaBot.Commands;
using JetKarmaBot.Models; using JetKarmaBot.Models;
using Telegram.Bot; using Telegram.Bot;
@ -24,5 +25,13 @@ namespace JetKarmaBot.Services.Handling
} }
public object GetService(Type serviceType) => Features.First(x => x.GetType() == serviceType); public object GetService(Type serviceType) => Features.First(x => x.GetType() == serviceType);
public T GetFeature<T>() => (T)Features.First(x => x is T); public T GetFeature<T>() => (T)Features.First(x => x is T);
//Method to reduce WET in commands
public Task SendMessage(string text) => Client.SendTextMessageAsync(
EventArgs.Message.Chat.Id,
text,
replyToMessageId: EventArgs.Message.MessageId,
disableNotification: true,
parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
} }
} }

View File

@ -81,10 +81,7 @@ namespace JetKarmaBot.Services.Handling
if (!TimeoutCache[uid].TimeoutMessaged) if (!TimeoutCache[uid].TimeoutMessaged)
{ {
Locale currentLocale = Locale[(await ctx.Database.Chats.FindAsync(ctx.EventArgs.Message.Chat.Id)).Locale]; Locale currentLocale = Locale[(await ctx.Database.Chats.FindAsync(ctx.EventArgs.Message.Chat.Id)).Locale];
await ctx.Client.SendTextMessageAsync( await ctx.SendMessage(currentLocale["jetkarmabot.ratelimit"]);
ctx.EventArgs.Message.Chat.Id,
currentLocale["jetkarmabot.ratelimit"],
replyToMessageId: ctx.EventArgs.Message.MessageId);
TimeoutCache[uid] = new TimeoutStats() { TimeoutMessaged = true, CooldownDate = TimeoutCache[uid].CooldownDate }; TimeoutCache[uid] = new TimeoutStats() { TimeoutMessaged = true, CooldownDate = TimeoutCache[uid].CooldownDate };
} }
return; return;