コード例 #1
0
ファイル: StartEvent.cs プロジェクト: hxhxd/SOCVR-Chatbot
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: Status.cs プロジェクト: hxhxd/SOCVR-Chatbot
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: RefreshTags.cs プロジェクト: hxhxd/SOCVR-Chatbot
        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.");
        }
コード例 #6
0
ファイル: QueueStats.cs プロジェクト: hxhxd/SOCVR-Chatbot
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: CurrentTag.cs プロジェクト: hxhxd/SOCVR-Chatbot
        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);
        }
コード例 #9
0
ファイル: Membership.cs プロジェクト: hxhxd/SOCVR-Chatbot
        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());
            }
        }
コード例 #10
0
        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);
                }
            }
        }
コード例 #11
0
 public void ProcessMessage(ChatExchangeDotNet.Message msg, ref ChatExchangeDotNet.Room rm) =>
 rm.PostReplyLight(msg, "http://i.stack.imgur.com/edt7R.jpg");