public void ReportIssue(Mod mod, string issueTitle, string issueBody, Action onCompletion)
        {
            Action <string> onSuccess = delegate(string output) {
                Main.NewText("Issue submit result: " + output, Color.Yellow);
                ErrorLogger.Log("Issue submit result: " + output);
            };
            Action <Exception, string> onFail = (e, output) => {
                Main.NewText("Issue submit error: " + e.Message, Color.Red);
                LogHelpers.Log(e.ToString());
            };

            PostGithubModIssueReports.ReportIssue(mod, issueTitle, issueBody, onSuccess, onFail, onCompletion);
        }
        ////////////////

        /// @private
        public override void Action(CommandCaller caller, string input, string[] args)
        {
            IList <Mod> mods   = ModListHelpers.GetAllLoadedModsPreferredOrder().ToList();
            int         argIdx = 1;

            string title;

            if (!CommandsHelpers.GetQuotedStringFromArgsAt(args, argIdx, out argIdx, out title))
            {
                caller.Reply("Invalid issue report title string", Color.Red);
                return;
            }

            string body;

            if (!CommandsHelpers.GetQuotedStringFromArgsAt(args, argIdx, out argIdx, out body))
            {
                caller.Reply("Invalid issue report description string", Color.Red);
                return;
            }

            int modIdx;

            if (!int.TryParse(args[0], out modIdx))
            {
                caller.Reply(args[argIdx] + " is not an integer", Color.Red);
                return;
            }
            if (modIdx <= 0 || modIdx > mods.Count)
            {
                caller.Reply(args[argIdx] + " is not a mod entry; out of range", Color.Red);
                return;
            }

            Action <bool, string> onCompletion = (success, output) => {
                if (output != "Done?")
                {
                    caller.Reply(output, Color.Lime);
                }
                else
                {
                    caller.Reply("Issue report was not sent", Color.Red);
                }
            };
            Action <Exception, string> onFail = (e, output) => {
                caller.Reply(e.Message, Color.Red);
            };

            PostGithubModIssueReports.ReportIssue(mods[modIdx - 1], title, body, onFail, onCompletion);
        }
        ////////////////

        public void ReportIssue(Mod mod, string issueTitle, string issueBody, Action onCompletion)
        {
            Action <bool, string> wrappedOnCompletion = (success, output) => {
                if (success)
                {
                    Main.NewText("Issue submit result: " + output, Color.Yellow);
                    LogHelpers.Log("Issue submit result: " + output);
                }
                onCompletion();
            };

            Action <Exception, string> onError = (e, output) => {
                Main.NewText("Issue submit error: " + e.Message, Color.Red);
                LogHelpers.Log(e.ToString());
            };

            PostGithubModIssueReports.ReportIssue(mod, issueTitle, issueBody, onError, wrappedOnCompletion);
        }