From a44d4b27a3d4ebaff4fa2b97ed68bfbd252b3395 Mon Sep 17 00:00:00 2001 From: Andreas Bielawski Date: Tue, 31 Mar 2020 12:52:45 +0200 Subject: [PATCH] Fix #3 Subscribe to channels by their ID --- Bot.cs | 34 +++++++++++------------ Commands.cs | 77 +++++++++++++++++++++++++++++++++------------------ RSSBot.csproj | 2 +- 3 files changed, 67 insertions(+), 46 deletions(-) diff --git a/Bot.cs b/Bot.cs index 1168d2e..0e837c0 100644 --- a/Bot.cs +++ b/Bot.cs @@ -40,7 +40,8 @@ namespace RSSBot { new RegexHandler($"^/start(?:@{BotInfo.Username})?$", Commands.Welcome), new RegexHandler($"^/help(?:@{BotInfo.Username})?$", Commands.Help), new RegexHandler($"^/rss(?:@{BotInfo.Username})?$", Commands.Show), - new RegexHandler($"^/rss(?:@{BotInfo.Username})? (@?[A-z0-9_]+)$", Commands.Show), + new RegexHandler($"^/rss(?:@{BotInfo.Username})? (@[A-z0-9_]+)$", Commands.Show), + new RegexHandler($@"^/rss(?:@{BotInfo.Username})? (-\d+)$", Commands.Show), new RegexHandler( $"^/show(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)$", Commands.ShowAvailableFeeds), @@ -48,14 +49,20 @@ namespace RSSBot { $"^/sub(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)$", Commands.Subscribe), new RegexHandler( - $"^/sub(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+) (@?[A-z0-9_]+)$$", + $"^/sub(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+) (@[A-z0-9_]+)$", + Commands.Subscribe), + new RegexHandler( + $@"^/sub(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+) (-\d+)$", Commands.Subscribe), new RegexHandler( $"^/del(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)$", Commands.Unsubscribe), new RegexHandler( - $"^/del(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+) (@?[A-z0-9_]+)$$", + $"^/del(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+) (@[A-z0-9_]+)$", Commands.Unsubscribe), + new RegexHandler( + $@"^/del(?:@{BotInfo.Username})? (http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&~+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+) (-\d+)$", + Commands.Unsubscribe) }; JobQueue = new Timer(e => { Commands.Sync(); }, null, TimeSpan.FromSeconds(5), @@ -75,9 +82,7 @@ namespace RSSBot { foreach (RedisValue feedUrl in allFeedUrls) { HashSet subs = new HashSet(); RedisValue[] allSubs = Configuration.Database.SetMembers($"{Configuration.RedisHash}:{feedUrl}:subs"); - foreach (RedisValue sub in allSubs) { - subs.Add(Convert.ToInt64(sub)); - } + foreach (RedisValue sub in allSubs) subs.Add(Convert.ToInt64(sub)); string lastEntry = Configuration.Database.HashGet($"{Configuration.RedisHash}:{feedUrl}", "last_entry"); @@ -91,30 +96,23 @@ namespace RSSBot { } private static void Bot_OnMessage(object? sender, MessageEventArgs messageEventArgs) { - var message = messageEventArgs.Message; + Message message = messageEventArgs.Message; if (message == null || message.Type != MessageType.Text) return; - if (!Configuration.Admins.Contains(message.From.Id)) { - return; - } + if (!Configuration.Admins.Contains(message.From.Id)) return; - foreach (RegexHandler handler in Handlers.Where(handler => handler.HandleUpdate(message))) { + foreach (RegexHandler handler in Handlers.Where(handler => handler.HandleUpdate(message))) handler.ProcessUpdate(message); - } } public static async void Save() { - if (RssBotFeeds.Count > 0) { - Logger.Info("Speichere Daten..."); - } + if (RssBotFeeds.Count > 0) Logger.Info("Speichere Daten..."); foreach (RssBotFeed feed in RssBotFeeds) { string feedKey = $"{Configuration.RedisHash}:{feed.Url}"; if (string.IsNullOrWhiteSpace(feed.LastEntry)) continue; await Configuration.Database.HashSetAsync(feedKey, "last_entry", feed.LastEntry); - foreach (long chatId in feed.Subs) { - await Configuration.Database.SetAddAsync($"{feedKey}:subs", chatId); - } + foreach (long chatId in feed.Subs) await Configuration.Database.SetAddAsync($"{feedKey}:subs", chatId); await Configuration.Database.SetAddAsync($"{Configuration.RedisHash}:feeds", feed.Url); } diff --git a/Commands.cs b/Commands.cs index c970f5f..d355c60 100644 --- a/Commands.cs +++ b/Commands.cs @@ -42,16 +42,24 @@ namespace RSSBot { await Bot.BotClient.SendChatActionAsync(message.Chat, ChatAction.Typing); if (args.Count > 2) { - string chatName = args[2].Value; - if (!chatName.StartsWith("@")) chatName = $"@{chatName}"; - Chat chatInfo; - try { - chatInfo = await Bot.BotClient.GetChatAsync(chatName); - } catch { - await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); - return; - } + string chatName = args[2].Value; + bool isId = long.TryParse(chatName, out chatId); + + if (isId) + try { + chatInfo = await Bot.BotClient.GetChatAsync(chatId); + } catch { + await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); + return; + } + else + try { + chatInfo = await Bot.BotClient.GetChatAsync(chatName); + } catch { + await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); + return; + } chatId = chatInfo.Id; @@ -97,16 +105,24 @@ namespace RSSBot { .FirstOrDefault(x => x.Url.ToLower().Equals(url.ToLower())); if (args.Count > 2) { - string chatName = args[2].Value; - if (!chatName.StartsWith("@")) chatName = $"@{chatName}"; - Chat chatInfo; - try { - chatInfo = await Bot.BotClient.GetChatAsync(chatName); - } catch { - await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); - return; - } + string chatName = args[2].Value; + bool isId = long.TryParse(chatName, out chatId); + + if (isId) + try { + chatInfo = await Bot.BotClient.GetChatAsync(chatId); + } catch { + await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); + return; + } + else + try { + chatInfo = await Bot.BotClient.GetChatAsync(chatName); + } catch { + await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); + return; + } chatId = chatInfo.Id; @@ -135,17 +151,24 @@ namespace RSSBot { await Bot.BotClient.SendChatActionAsync(message.Chat, ChatAction.Typing); if (args.Count > 1) { - string chatName = args[1].Value; - if (!chatName.StartsWith("@")) chatName = $"@{chatName}"; - Chat chatInfo; + string chatName = args[1].Value; + bool isId = long.TryParse(chatName, out chatId); - try { - chatInfo = await Bot.BotClient.GetChatAsync(chatName); - } catch { - await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); - return; - } + if (isId) + try { + chatInfo = await Bot.BotClient.GetChatAsync(chatId); + } catch { + await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); + return; + } + else + try { + chatInfo = await Bot.BotClient.GetChatAsync(chatName); + } catch { + await Bot.BotClient.SendTextMessageAsync(message.Chat, "❌ Dieser Kanal existiert nicht."); + return; + } chatId = chatInfo.Id; chatTitle = chatInfo.Title; diff --git a/RSSBot.csproj b/RSSBot.csproj index cb2138e..0b71896 100644 --- a/RSSBot.csproj +++ b/RSSBot.csproj @@ -4,7 +4,7 @@ Exe netcoreapp3.1 win-x64;osx-x64;linux-x64;linux-arm - 1.0.0 + 1.0.1 false