public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { // Get the stats var sa = new CloseQueueStatsAccessor(); var stats = sa.GetOverallQueueStats(); var statsMessage = new[] { $"{stats.NeedReview} need review", $"{stats.ReviewsToday} reviews today", $"{stats.ReviewsAllTime} reviews all-time", } .ToCSV(Environment.NewLine); // Get the next 3 tags var tags = SedeAccessor.GetTags(chatRoom, ConfigurationAccessor.LoginEmail, ConfigurationAccessor.LoginPassword); if (tags == null) { chatRoom.PostReplyOrThrow(incomingChatMessage, "My attempt to get tag data returned no information. This could be due to the site being down or blocked for me, or a programming error. Try again in a few minutes, or tell the developer if this happens often."); return; } var topTags = tags .Take(3) .Select(x => $"[tag:{x.Key}]"); var combinedTags = topTags.ToCSV(", "); var tagsMessage = $"The tags to work on are: {combinedTags}."; chatRoom.PostMessageOrThrow(statsMessage); chatRoom.PostMessageOrThrow(tagsMessage); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { using (var db = new DatabaseContext()) { var pendingRequests = db.PermissionRequests .Include(x => x.RequestingUser) .Where(x => x.Accepted == null) .OrderBy(x => x.RequestedOn) .ToList(); if (!pendingRequests.Any()) { chatRoom.PostReplyOrThrow(incomingChatMessage, "There are no users requesting access to a permission group."); return; } var tableText = pendingRequests.ToStringTable( new[] { "Request #", "Display Name", "User Id", "Requesting", "Requested At" }, x => x.Id, x => chatRoom.GetUser(x.RequestingUser.ProfileId), x => x.RequestingUser.ProfileId, x => x.RequestedPermissionGroup.ToString(), x => x.RequestedOn.ToString("yyyy-MM-dd HH:mm:ss 'UTC'")); chatRoom.PostReplyOrThrow(incomingChatMessage, "The following is a list of users requesting access to a permission group. If you are part of these groups, you may use the commands `approve request [#]` or `reject request [#]` to process them."); chatRoom.PostMessageLight(tableText); } }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { var elapsedTime = DateTime.Now - ChatBotStats.LoginDate; var sha = ThisAssembly.Git.Sha.Substring(0, 8); var branch = ThisAssembly.Git.Branch; var location = ConfigurationAccessor.InstallationLocation; var commitUrl = $"https://github.com/SO-Close-Vote-Reviewers/SOCVR-Chatbot/commit/{ThisAssembly.Git.Sha}"; var message = $"SOCVR Chatbot, running at {location}, version [`{sha}`]({commitUrl}) on {branch}, running for {elapsedTime.ToUserFriendlyString()}."; chatRoom.PostMessageOrThrow(message); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { // First, get the number in the command var tagsToFetchArgument = GetRegexMatchingObject() .Match(incomingChatMessage.Content) .Groups[1] .Value .Parse <int?>(); int tagsToFetch; var maxTagsToFetch = ConfigurationAccessor.MaxFetchTags; if (tagsToFetchArgument != null) { if (tagsToFetchArgument <= 0) { chatRoom.PostReplyOrThrow(incomingChatMessage, "I can't fetch zero tags or a negative number of tags! Please use a number between 1 and {0}." .FormatInline(maxTagsToFetch)); return; } if (tagsToFetchArgument > maxTagsToFetch) { chatRoom.PostReplyOrThrow(incomingChatMessage, "Sorry, that's too many tags for me. Please choose a number between 1 and {0}" .FormatInline(maxTagsToFetch)); return; } tagsToFetch = tagsToFetchArgument.Value; } else { tagsToFetch = ConfigurationAccessor.DefaultNextTagCount; } var tags = SedeAccessor.GetTags(chatRoom, ConfigurationAccessor.LoginEmail, ConfigurationAccessor.LoginPassword); if (tags == null) { chatRoom.PostReplyOrThrow(incomingChatMessage, "My attempt to get tag data returned no information. This could be due to the site being down or blocked for me, or a programming error. Try again in a few minutes, or tell the developer if this happens often."); return; } var tagString = tags .Take(tagsToFetch) .Select(x => $"[tag:{x.Key}] {x.Value}") .ToCSV(", "); var message = $"The next {tagsToFetch} tags are: {tagString}"; chatRoom.PostReplyOrThrow(incomingChatMessage, message); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { SedeAccessor.InvalidateCache(); var dataData = SedeAccessor.GetTags(chatRoom, ConfigurationAccessor.LoginEmail, ConfigurationAccessor.LoginPassword); if (dataData == null) { chatRoom.PostReplyOrThrow(incomingChatMessage, "My attempt to get tag data returned no information. This could be due to the site being down or blocked for me, or a programming error. Try again in a few minutes, or tell the developer if this happens often."); return; } chatRoom.PostReplyOrThrow(incomingChatMessage, "Tag data has been refreshed."); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { var sa = new CloseQueueStatsAccessor(); var stats = sa.GetOverallQueueStats(); var message = new[] { $"{stats.NeedReview} need review", $"{stats.ReviewsToday} reviews today", $"{stats.ReviewsAllTime} reviews all-time", } .ToCSV(Environment.NewLine); chatRoom.PostMessageOrThrow(message); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { var responsePhrases = new List <string>() { "I'm alive and kicking!", "Still here you guys!", "I'm not dead yet!", "I feel... happy!", "I think I'll go for a walk...", "I don't want to go on the cart!", "I feel fine.", }; var phrase = responsePhrases.PickRandom(); chatRoom.PostReplyOrThrow(incomingChatMessage, phrase); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { var tags = SedeAccessor.GetTags(chatRoom, ConfigurationAccessor.LoginEmail, ConfigurationAccessor.LoginPassword); if (tags == null) { chatRoom.PostReplyOrThrow(incomingChatMessage, "My attempt to get tag data returned no information. This could be due to the site being down or blocked for me, or a programming error. Try again in a few minutes, or tell the developer if this happens often."); return; } string dataMessage; if (tags != null) { dataMessage = $"The current tag is [tag:{tags.First().Key}] with {tags.First().Value} known review items."; } else { dataMessage = "I couldn't find any tags! Either the query is empty or something bad happened."; } chatRoom.PostReplyOrThrow(incomingChatMessage, dataMessage); }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { using (var db = new DatabaseContext()) { var permissionGroups = db.UserPermissions .Include(x => x.User) .GroupBy(x => x.PermissionGroup) .OrderBy(x => x.Key) .ToList(); var outputMessageBuilder = new StringBuilder(); foreach (var permissionGroup in permissionGroups) { outputMessageBuilder.AppendLine(" " + permissionGroup.Key.ToString()); var usersInGroup = permissionGroup .Select(x => x.User) .Select(x => new { DisplayName = chatRoom.GetUser(x.ProfileId).Name, ProfileId = x.ProfileId }) .OrderBy(x => x.DisplayName); foreach (var user in usersInGroup) { outputMessageBuilder.AppendLine($" {user.DisplayName} ({user.ProfileId})"); } outputMessageBuilder.AppendLine(" "); } chatRoom.PostReplyOrThrow(incomingChatMessage, "Current users in permission groups:"); chatRoom.PostMessageOrThrow(outputMessageBuilder.ToString()); } }
public override void RunAction(ChatExchangeDotNet.Message incomingChatMessage, ChatExchangeDotNet.Room chatRoom) { var userCommands = ChatbotActionRegister.AllChatActions .Where(x => x is UserCommand); var showAllCommands = GetRegexMatchingObject() .Match(incomingChatMessage.Content) .Groups[1] .Success; if (showAllCommands) { var groupedCommands = ChatbotActionRegister.AllChatActions .Where(x => x is UserCommand) .GroupBy(x => x.RequiredPermissionGroup); var finalMessageLines = new List <string>(); finalMessageLines.Add("Below is a list of commands for the Close Vote Chat Bot"); finalMessageLines.Add(""); foreach (var group in groupedCommands) { var permissionGroupName = group.Key != null ? group.Key.ToString() : "Public"; finalMessageLines.Add(permissionGroupName); var groupCommandLines = group .OrderBy(x => x.ActionName) .Select(x => $" {x.ActionUsage} - {x.ActionDescription}"); finalMessageLines.AddRange(groupCommandLines); finalMessageLines.Add(""); } var finalMessage = finalMessageLines .Select(x => " " + x) .ToCSV(Environment.NewLine); chatRoom.PostMessageOrThrow(finalMessage); } else { chatRoom.PostReplyOrThrow(incomingChatMessage, "Here is a list of commands you have permission to run:"); using (var db = new DatabaseContext()) { var permissionsForUser = db.Users .Include(x => x.Permissions) .Single(x => x.ProfileId == incomingChatMessage.Author.ID) .Permissions .Select(x => x.PermissionGroup) .ToList(); var commandMessage = userCommands .Where(x => x.RequiredPermissionGroup == null || x.RequiredPermissionGroup.Value.In(permissionsForUser)) .OrderBy(x => x.ActionName) .Select(x => $" {x.ActionUsage} - {x.ActionDescription}") .ToCSV(Environment.NewLine); chatRoom.PostMessageOrThrow(commandMessage); } } }
public void ProcessMessage(ChatExchangeDotNet.Message msg, ref ChatExchangeDotNet.Room rm) => rm.PostReplyLight(msg, "http://i.stack.imgur.com/edt7R.jpg");