diff --git a/modules/RichSiteSummary/Data/Post.cs b/modules/RichSiteSummary/Data/Post.cs index 2fe2c24..cf1dd89 100644 --- a/modules/RichSiteSummary/Data/Post.cs +++ b/modules/RichSiteSummary/Data/Post.cs @@ -6,6 +6,8 @@ using System; using System.ComponentModel.DataAnnotations; using System.Text; +using System.Web; +using Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule; using Telegram.Bot.Types.Enums; namespace Kruzya.TelegramBot.RichSiteSummary.Data @@ -28,8 +30,15 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Data protected override string ViewableUrl { - get => Url; + get => UtmUtility.ApplyParameters(Url, new UtmParameters() + { + Source = "telegram", + Type = "rss_post", + Campaign = "subscriber", + Content = PostId.ToString() + }); } + #endregion /// diff --git a/modules/RichSiteSummary/Handler/FeedList.cs b/modules/RichSiteSummary/Handler/FeedList.cs index a5c0d0f..943d7ca 100644 --- a/modules/RichSiteSummary/Handler/FeedList.cs +++ b/modules/RichSiteSummary/Handler/FeedList.cs @@ -92,7 +92,7 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Handler } } - [Command("feed_subscriptions")] + [Command("rss_subscriptions")] public async Task Subscriptions() { if (!(await GenerateMenu(":sub"))) diff --git a/modules/RichSiteSummary/UrchinTrackingModule/UtmParameters.cs b/modules/RichSiteSummary/UrchinTrackingModule/UtmParameters.cs new file mode 100644 index 0000000..2b64722 --- /dev/null +++ b/modules/RichSiteSummary/UrchinTrackingModule/UtmParameters.cs @@ -0,0 +1,11 @@ +namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule +{ + public struct UtmParameters + { + public string Source; + public string Type; + public string Campaign; + public string Term; + public string Content; + } +} \ No newline at end of file diff --git a/modules/RichSiteSummary/UrchinTrackingModule/UtmUtility.cs b/modules/RichSiteSummary/UrchinTrackingModule/UtmUtility.cs new file mode 100644 index 0000000..90ddb6f --- /dev/null +++ b/modules/RichSiteSummary/UrchinTrackingModule/UtmUtility.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Web; +using Microsoft.EntityFrameworkCore.Internal; + +namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule +{ + public class UtmUtility + { + public static string ApplyParameters(string url, UtmParameters parameters) + { + var uri = new Uri(url); + var query = HttpUtility.ParseQueryString(uri.Query); + + SetIfNotNull(query, "utm_source", parameters.Source); + SetIfNotNull(query, "utm_medium", parameters.Type); + SetIfNotNull(query, "utm_campaign", parameters.Campaign); + SetIfNotNull(query, "utm_term", parameters.Term); + SetIfNotNull(query, "utm_content", parameters.Content); + + var uriBuilder = new UriBuilder(uri); + uriBuilder.Query = BuildQueryString(query); + return uriBuilder.ToString(); + } + + protected static string BuildQueryString(NameValueCollection query) + { + var queryParameters = new List(); + + foreach (var keyName in query.AllKeys) + { + var value = query[keyName]; + queryParameters.Add($"{HttpUtility.UrlEncode(keyName)}={HttpUtility.UrlEncode(value)}"); + } + + return String.Join('&', queryParameters); + } + + protected static void SetIfNotNull(NameValueCollection queryParameteters, string key, string value) + { + if (string.IsNullOrWhiteSpace(value)) + { + return; + } + + queryParameteters.Set(key, value); + } + } +} \ No newline at end of file diff --git a/modules/UrlLimitations/MessageHandler.cs b/modules/UrlLimitations/MessageHandler.cs index 55e99d3..a987b1c 100644 --- a/modules/UrlLimitations/MessageHandler.cs +++ b/modules/UrlLimitations/MessageHandler.cs @@ -24,10 +24,8 @@ namespace Kruzya.TelegramBot.UrlLimitations } [TextMessage(InChat.Public)] - public async Task OnMessageReceived() + public void OnMessageReceived() { - Logger.LogDebug($"Message received from {From.Id} in {Chat.Id}"); - UInt16 messageCount; var chatMember = ChatMember.From(Chat.Id, From.Id); if (!ChatMembersCache.TryGetValue(chatMember, out messageCount)) @@ -48,10 +46,12 @@ namespace Kruzya.TelegramBot.UrlLimitations 0) { var targetChat = new ChatId(Chat.Id); - await Bot.KickChatMemberAsync(new ChatId(Chat.Id), From.Id, DateTime.Now.AddDays(1)); - await Bot.DeleteMessageAsync(targetChat, message.MessageId); - await Bot.SendTextMessageAsync(targetChat, - $"Member {From.ToHtml()} has been banned.\nReason:
Spam suspicion
", ParseMode.Html); + Task.WaitAll(new Task[] { + Bot.KickChatMemberAsync(new ChatId(Chat.Id), From.Id, DateTime.Now.AddDays(1)), + Bot.DeleteMessageAsync(targetChat, message.MessageId), + Bot.SendTextMessageAsync(targetChat, + $"Member {From.ToHtml()} has been banned.\nReason:
Spam suspicion
", ParseMode.Html) + }); } } }