public static async Task OnMessageCreated(DiscordClient c, MessageCreateEventArgs args) { if (DefaultHandlerFilter.IsFluff(args.Message)) { return; } if ("media".Equals(args.Channel.Name, StringComparison.InvariantCultureIgnoreCase)) { return; } var lastBotMessages = await args.Channel.GetMessagesBeforeAsync(args.Message.Id, 20, DateTime.UtcNow.AddSeconds(-30)).ConfigureAwait(false); foreach (var msg in lastBotMessages) { if (BotReactionsHandler.NeedToSilence(msg).needToChill) { return; } } lastBotMessages = await args.Channel.GetMessagesBeforeCachedAsync(args.Message.Id, Config.ProductCodeLookupHistoryThrottle).ConfigureAwait(false); StringBuilder previousRepliesBuilder = null; foreach (var msg in lastBotMessages) { if (msg.Author.IsCurrent) { previousRepliesBuilder ??= new StringBuilder(); previousRepliesBuilder.AppendLine(msg.Content); var embeds = msg.Embeds; if (embeds?.Count > 0) { foreach (var embed in embeds) { previousRepliesBuilder.AppendLine(embed.Title).AppendLine(embed.Description); } } } } var previousReplies = previousRepliesBuilder?.ToString() ?? ""; var idsFromPreviousReplies = GetIssueIdsFromLinks(previousReplies); var issuesToLookup = GetIssueIds(args.Message.Content) .Where(lnk => !idsFromPreviousReplies.Contains(lnk)) .Take(args.Channel.IsPrivate ? 50 : 5) .ToList(); if (issuesToLookup.Count == 0) { return; } var suffix = issuesToLookup.Count == 1 ? "" : "s"; if (GithubClient.Client.RateLimitRemaining - issuesToLookup.Count >= 10) { foreach (var issueId in issuesToLookup) { await Pr.LinkIssue(c, args.Message, issueId).ConfigureAwait(false); } } else { var result = new StringBuilder($"Link{suffix} to the mentioned issue{suffix}:"); foreach (var issueId in issuesToLookup) { result.AppendLine().Append("https://github.com/RPCS3/rpcs3/issues/" + issueId); } await args.Channel.SendAutosplitMessageAsync(result, blockStart : null, blockEnd : null).ConfigureAwait(false); } }