Beispiel #1
0
        public static async void FindMCSnapshot(SoraMessage e, string version)
        {
            var vm          = Regex.Match(version.Trim(), @"^(?<mainVersion>[^-]+)(?<sub>-(?<subType>pre|rc)(?<subNum>\d+))?$");
            var mainVersion = vm.Groups["mainVersion"].Value;
            var subType     = "snapshot";
            var subNum      = "";

            if (vm.Groups["sub"].Success && !string.IsNullOrWhiteSpace(vm.Groups["sub"].Value))
            {
                subType = vm.Groups["subType"].Value;
                subNum  = vm.Groups["subNum"].Value;
            }
            string changelog = null;
            var    articles  = new ArticleList("snapshot");
            var    article   = articles.Articles.Where(x => x.Key.Contains(mainVersion) &&
                                                       (subType == "snapshot" || ((subType == "pre" ? x.Key.Contains("PRE-RELEASE")
            : subType == "rc" && x.Key.Contains("Release Candidate")) && x.Key.Contains(subNum)))).FirstOrDefault();

            if (!string.IsNullOrEmpty(article.Key))
            {
                changelog = article.Value;
            }
            if (!string.IsNullOrEmpty(changelog))
            {
                MoChangeLogsFormat(e, changelog);
            }
            else
            {
                await e.Reply($"未能查找到 {version} 的更新日志");
            }
        }
Beispiel #2
0
        public static async void RemoveJiraListener(SoraMessage e)
        {
            SubscribeList data = await Database.FindAsync <SubscribeList>(
                x
                => x.Platform == "qq group" &&
                x.Type == "minecraft jira" &&
                x.Target == "java" &&
                x.Listener == e.SourceGroup.Id.ToString());

            if (data == null)
            {
                await e.ReplyToOriginal("本群未订阅该目标,请检查输入是否正确");

                return;
            }
            await Database.DeleteAsync(data).ContinueWith(async x =>
            {
                if (x.Result > 0)
                {
                    await e.ReplyToOriginal("订阅项目已移除");
                }
                else if (x.IsFaulted && x.Exception != null)
                {
                    await e.ReplyToOriginal(new StringBuilder()
                                            .AppendLine("订阅项目因异常导致移除失败,错误信息:")
                                            .Append(ConsoleLog.ErrorLogBuilder(x.Exception))
                                            .ToString());
                }
                else
                {
                    await e.AutoAtReply("订阅项目因未知原因导致移除失败,请稍后重试");
                }
            });
        }
Beispiel #3
0
        public static async void Normal(SoraMessage e)
        {
            try
            {
                var           h  = Library.Roll.Model.HistoryToday.Today();
                StringBuilder sb = new();
                sb.AppendLine("[" + DateTime.Today.ToString("yyyy-MM-dd") + "]");
                sb.Append(h[0].ToString());
                for (var i = 1; i < h.Length && i < 50; i++)
                {
                    sb.AppendLine().Append(h[i].ToString());
                }
                if (h.Length >= 50)
                {
                    sb.AppendLine().Append("<更多条目已被过滤,如果需要请自行搜索>");
                }
                await e.Reply(sb.ToString());

                await e.RemoveCoins(3);
            }
            catch
            {
                await e.Reply("数据获取失败,请稍后再试");
            }
        }
Beispiel #4
0
        public static async void Gif(SoraMessage e, int rot)
        {
            Func <Image <Rgba32>, Image <Rgba32> > func = null;

            if ((rot & 0b10000) == 0b10000) //倒流
            {
                func = func == null ? CreateReverse : Stack(func, CreateReverse);
            }
            if ((rot & 0b1000) == 0b1000) //左行
            {
                func = func == null ? CreateMoveLeft : Stack(func, CreateMoveLeft);
            }
            if ((rot & 0b100) == 0b100) //右行
            {
                func = func == null ? CreateMoveRight : Stack(func, CreateMoveRight);
            }
            if ((rot & 0b10) == 0b10) //上行
            {
                func = func == null ? CreateMoveUp : Stack(func, CreateMoveUp);
            }
            if ((rot & 0b1) == 0b1) //下行
            {
                func = func == null ? CreateMoveDown : Stack(func, CreateMoveDown);
            }
            await Worker(e, func);
        }
Beispiel #5
0
        public static async void Translate(SoraMessage e, string text)
        {
            text = SoraMessage.Escape(text);
            try
            {
                var result = BaiduTranslate.GetTranslateResult(text);
                if (result.Success)
                {
                    if (result.OriginalLanguage.Equals(result.TranslateLanguage))
                    {
                        await Task.Delay(1000);

                        result = BaiduTranslate.GetTranslateResult(text, result.OriginalLanguage?.Id ?? "zh", "en");
                    }
                    if (result.Success)
                    {
                        await e.ReplyToOriginal(new StringBuilder()
                                                .AppendLine($"[{result.OriginalLanguage}=>{result.TranslateLanguage}]")
                                                .Append(result.TranslateString).ToString());

                        return;
                    }
                }
                await e.ReplyToOriginal(new StringBuilder().Append("翻译失败,")
                                        .AppendLine(result.Info).Append(result.TipMessage).ToString());
            }
            catch (Exception ex)
            {
                await e.ReplyToOriginal(new StringBuilder().Append("翻译失败,")
                                        .AppendLine(ex.GetFormatString()).ToString());
            }
        }
Beispiel #6
0
        public static async void Examination(SoraMessage e)
        {
            var day = Math.Floor((new DateTime(2021, 6, 7, 0, 0, 0) - DateTime.Now.Date).TotalDays);

            if (day > 3)
            {
                await e.Reply($"距离高考还有 {day} 天");
            }
            else if (day == 3)
            {
                await e.Reply("距离高考还有 3 天,冲冲冲");
            }
            else if (day == 2)
            {
                await e.Reply("距离高考还有 2 天,加油啊");
            }
            else if (day == 1)
            {
                await e.Reply("明天就开始高考啦,祝你们好运!");
            }
            else if (day < 1 && day > -4)
            {
                await e.Reply("已经在高考期间啦,考个好成绩回来哦!");
            }
            else
            {
                await e.Reply("考完啦,放松一下吧");
            }
        }
Beispiel #7
0
        public static async void FHL(SoraMessage e, string _char)
        {
            _char = SoraMessage.Escape(_char);
            if (_char.Length != 1)
            {
                await e.ReplyToOriginal("参数错误,请检查后重试");

                return;
            }
            var result = await Tools.Poem.Search(_char);

            if (result.Count <= 0)
            {
                await e.ReplyToOriginal("没有搜索到任何结果,请检查后重试");

                return;
            }
            if (result.Count <= 5)
            {
                await e.Reply($"带有「{_char}」字的诗句有:" + Environment.NewLine + string.Join(Environment.NewLine, result));
            }
            else
            {
                var s    = new string[5];
                var rand = new Tools.Rand();
                for (var i = 0; i < 5; i++)
                {
                    var id = rand.Int(1, result.Count) - 1;
                    s[i] = result[id];
                    result.RemoveAt(id);
                }
                await e.Reply($"带有「{_char}」字的诗句有(随机选取5句):" + Environment.NewLine + string.Join(Environment.NewLine, s));
            }
            await e.RemoveCoins(2);
        }
Beispiel #8
0
        public static async void DisableAutoLink(SoraMessage e)
        {
            QQGroupSetting data = await Database.FindAsync <QQGroupSetting>(x => x.Group == e.SourceGroup.Id);

            if (data == null || !data.SmartMinecraftLink)
            {
                await e.ReplyToOriginal("本群未启用该功能,无需禁用");

                return;
            }
            data.SmartMinecraftLink = false;
            await Database.UpdateAsync(data).ContinueWith(async x =>
            {
                if (x.Result > 0)
                {
                    await e.ReplyToOriginal("本群已成功禁用mojira智能解析功能");
                }
                else if (x.IsFaulted && x.Exception != null)
                {
                    await e.ReplyToOriginal(new StringBuilder()
                                            .AppendLine("因异常导致功能禁用失败,错误信息:")
                                            .Append(ConsoleLog.ErrorLogBuilder(x.Exception))
                                            .ToString());
                }
                else
                {
                    await e.ReplyToOriginal("因未知原因导致功能禁用失败,请稍后重试");
                }
            });
        }
Beispiel #9
0
 public static async void MoChangeLogs(SoraMessage e, string type)
 {
     try
     {
         var articles = new ArticleList(type);
         if (articles.Articles.Count > 0)
         {
             await e.Reply(new StringBuilder()
                           .AppendLine(articles.Title)
                           .Append(string.Join(Environment.NewLine,
                                               articles.Articles.Select(x => x.Key + Environment.NewLine + "    " + x.Value).Take(5)))
                           .ToString());
         }
         else
         {
             await e.ReplyToOriginal("无效的类型 (仅支持 beta/release/snapshot)");
         }
     }
     catch (Exception ex)
     {
         await e.ReplyToOriginal(new StringBuilder()
                                 .AppendLine("获取文章列表时发生错误")
                                 .Append(ex.GetFormatString()));
     }
 }
Beispiel #10
0
        public static async void TipList(SoraMessage e)
        {
            var list = await TipMessageService.GetTipMessages(TipTargetType.QQGroup, e.SourceGroup.Id);

            if (list.Length > 0)
            {
                var sb = new StringBuilder("本群现有的所有的提醒项目:");
                foreach (var tip in list)
                {
                    sb.AppendLine().AppendLine($"[ID:{tip.Id}]");
                    if (tip.Duplicate)
                    {
                        sb.AppendLine($"下一次提醒时间:{tip.TipTime:yyyy-MM-dd HH:mm:ss}");
                        sb.AppendLine($"提醒间隔:{tip.Interval.Days}天{tip.Interval.Hours}时{tip.Interval.Minutes}分{tip.Interval.Seconds}秒");
                        sb.AppendLine($"提醒结束于:{tip.EndTime:yyyy-MM-dd HH:mm:ss}");
                    }
                    else
                    {
                        sb.AppendLine($"提醒时间:{tip.TipTime:yyyy-MM-dd HH:mm:ss}");
                    }
                    sb.AppendLine("提醒内容:");
                    sb.Append(tip.Message);
                }
                await e.Reply(sb.ToString());
            }
            else
            {
                await e.Reply("本群目前不存在提示信息");
            }
        }
Beispiel #11
0
        public static async void Normal(SoraMessage e)
        {
            try
            {
                var           h  = Library.Roll.Model.HistoryToday.Today();
                StringBuilder sb = new();
                sb.AppendLine("[" + DateTime.Today.ToString("yyyy-MM-dd") + "]");
                sb.AppendJoin(Environment.NewLine, h);
                if (h.Length > 30)
                {
                    var bin = UbuntuPastebin.Paste(sb.ToString(), "text", "Hitsory Today");
                    await e.ReplyToOriginal(new StringBuilder()
                                            .AppendLine("数据过多,请前往以下链接查看")
                                            .Append(bin).ToString());
                }
                else
                {
                    await e.Reply(sb.ToString());
                }
                await e.RemoveCoins(3);

                await e.UpdateGroupCooldown("historytoday");
            }
            catch
            {
                await e.Reply("数据获取失败,请稍后再试");
            }
        }
Beispiel #12
0
        public static async void AddTip(SoraMessage e, DateTime time, string message)
        {
            message = SoraMessage.Escape(message);
            var now = DateTime.Now;

            if (time < now)
            {
                await e.ReplyToOriginal("提示时间不可设置为过去的时间");

                return;
            }
            else if ((time - now).TotalSeconds < 300)
            {
                await e.ReplyToOriginal("提示时间不可设置为 5 分钟内的目标");

                return;
            }
            try
            {
                await TipMessageService.AddTipMessage(TipTargetType.QQGroup, e.SourceGroup, time, message);

                await e.ReplyToOriginal("已添加单次提示信息");
            }
            catch (Exception ex)
            {
                await e.ReplyToOriginal(ex.Message);
            }
        }
Beispiel #13
0
 public static async void GetMojiraList(SoraMessage e, DateTime from, DateTime to)
 {
     Issue[] issues = null;
     try
     {
         issues = JiraExtension.GetMCFixedIssues(from, to);
     }
     catch (Exception ex)
     {
         ConsoleLog.Error("Minecraft Jira Checker", ConsoleLog.ErrorLogBuilder(ex));
         await e.ReplyToOriginal(new StringBuilder()
                                 .AppendLine("获取信息时发生错误:")
                                 .Append(ex.GetFormatString())
                                 .ToString());
     }
     if (issues.Length > 0)
     {
         await e.ReplyToOriginal(new StringBuilder()
                                 .AppendLine("[Minecraft Jira]")
                                 .AppendLine("哇哦,Bugjang杀死了这些虫子:")
                                 .AppendLine(string.Join(Environment.NewLine, issues.Select(x => x.Title)))
                                 .Append($"统计时间: {from:yyyy-MM-dd HH:mm} ~ {to:yyyy-MM-dd HH:mm}")
                                 .ToString());
     }
     else
     {
         await e.ReplyToOriginal(new StringBuilder()
                                 .AppendLine("[Minecraft Jira]")
                                 .AppendLine("可恶,这段时间Bugjang一个虫子也没有杀")
                                 .Append($"统计时间: {from:yyyy-MM-dd HH:mm} ~ {to:yyyy-MM-dd HH:mm}")
                                 .ToString());
     }
 }
Beispiel #14
0
        public static async void GetIllustDetail(SoraMessage e, int id)
        {
            var detail = await Illust.Get(id);

            if (detail == null)
            {
                await e.ReplyToOriginal("数据获取失败,请稍后再试");
            }
            else
            {
                ArrayList msg = new();
                foreach (var img in detail.Images)
                {
                    msg.Add(CQCode.CQImage(ImageUrls.ToPixivCat(img.Medium)));
                }
                msg.Add(new StringBuilder().AppendLine()
                        .AppendLine(detail.Title)
                        .AppendLine($"Author: {detail.Author}")
                        .AppendLine(detail.Caption)
                        .AppendLine($"Tags: {string.Join(" | ", detail.Tags)}")
                        .AppendLine($"Publish Date: {detail.CreateDate:yyyy-MM-dd hh:mm:ss}")
                        .AppendLine($"Bookmarks: {detail.TotalBookmarks} Comments:{detail.TotalComments} Views:{detail.TotalView}")
                        .Append(detail.Url)
                        .ToString());
                await e.Reply(msg.ToArray());

                await e.RemoveCoins(5);
            }
        }
Beispiel #15
0
        public static async void MoChangeLogsFormat(SoraMessage e, string url)
        {
            url = SoraMessage.Escape(url);
            if (!url.StartsWith("https://feedback.minecraft.net/hc/en-us/articles/"))
            {
                await e.ReplyToOriginal("无效的目标文章网址");

                return;
            }
            try
            {
                var article = new Article(url);
                if (string.IsNullOrWhiteSpace(article.Title))
                {
                    await e.ReplyToOriginal("无效的目标文章网址");

                    return;
                }
                var bin = UbuntuPastebin.Paste(article.Markdown, "md", "Mojang");
                await e.ReplyToOriginal(new StringBuilder()
                                        .AppendLine("目标文章已格式化至以下地址暂存,请及时查阅以免数据过期")
                                        .Append(bin).ToString());
            }
            catch (Exception ex)
            {
                await e.ReplyToOriginal(new StringBuilder()
                                        .AppendLine("获取文章时发生错误")
                                        .Append(ex.GetFormatString()));
            }
        }
Beispiel #16
0
        public static async void EnableAutoLink(SoraMessage e)
        {
            QQGroupSetting data = await Database.FindAsync <QQGroupSetting>(x => x.Group == e.SourceGroup.Id);

            if (data != null)
            {
                if (data.SmartPixivLink)
                {
                    await e.ReplyToOriginal("本群已启用该功能,无需再次启用");

                    return;
                }
                data.SmartPixivLink = true;
                await Database.UpdateAsync(data).ContinueWith(async x =>
                {
                    if (x.Result > 0)
                    {
                        await e.ReplyToOriginal("本群已成功启用pixiv智能解析功能");
                    }
                    else if (x.IsFaulted && x.Exception != null)
                    {
                        await e.ReplyToOriginal(new StringBuilder()
                                                .AppendLine("因异常导致功能启用失败,错误信息:")
                                                .Append(ConsoleLog.ErrorLogBuilder(x.Exception))
                                                .ToString());
                    }
                    else
                    {
                        await e.ReplyToOriginal("因未知原因导致功能启用失败,请稍后重试");
                    }
                });
            }
            else
            {
                await Database.InsertAsync(new QQGroupSetting()
                {
                    Group          = e.SourceGroup.Id,
                    SmartPixivLink = true
                }).ContinueWith(async x =>
                {
                    if (x.Result > 0)
                    {
                        await e.ReplyToOriginal("本群已成功启用pixiv智能解析功能");
                    }
                    else if (x.IsFaulted && x.Exception != null)
                    {
                        await e.ReplyToOriginal(new StringBuilder()
                                                .AppendLine("因异常导致功能启用失败,错误信息:")
                                                .Append(ConsoleLog.ErrorLogBuilder(x.Exception))
                                                .ToString());
                    }
                    else
                    {
                        await e.ReplyToOriginal("因未知原因导致功能启用失败,请稍后重试");
                    }
                });
            }
        }
Beispiel #17
0
        static async Task SendGif(SoraMessage e, Image <Rgba32> gif)
        {
            var file = Path.GetTempFileName();

            SaveGif(gif, file);
            await e.Reply(CQCode.CQImage(file));

            await e.RemoveCoins(5);
        }
Beispiel #18
0
 public static async void Another(SoraMessage e)
 {
     try
     {
         await e.Reply(Tools.Hitokoto.GetAnother());
     }
     catch
     {
         await e.Reply("毒一言获取失败,请稍后再试");
     }
 }
Beispiel #19
0
 public static async void Normal(SoraMessage e)
 {
     try
     {
         await e.Reply(Tools.Hitokoto.Get().ToString());
     }
     catch
     {
         await e.Reply("一言获取失败,请稍后再试");
     }
 }
Beispiel #20
0
        public static async void TipRemove(SoraMessage e, int id)
        {
            var tip = await TipMessageService.GetTipMessageById(id);

            if (tip != null && tip.TargetType == TipTargetType.QQGroup && tip.TargetID == e.SourceGroup.Id)
            {
                await tip.DeleteAsync();

                await e.ReplyToOriginal("操作成功");
            }
            await e.ReplyToOriginal($"不存在ID为 {id} 的提示消息");
        }
Beispiel #21
0
 public static async void CalcMath(SoraMessage e, string expr)
 {
     try
     {
         double result = Tools.CalcTool.GetExprValue(expr.Replace(" ", ""));
         await e.ReplyToOriginal($"{expr} = {result}");
     }
     catch
     {
         await e.ReplyToOriginal("操作失败");
     }
 }
Beispiel #22
0
        public static async void NewNewNewBOL(SoraMessage e)
        {
            var day = Math.Floor((DateTime.Now.Date - new DateTime(2021, 6, 25, 0, 0, 0)).TotalDays);

            if (day > 0)
            {
                await e.Reply($"当前为新新新北欧历时间:\nxxxx年xx月xx-{day}日 " + DateTime.Now.ToString("HH时mm分ss秒"));
            }
            else
            {
                await e.Reply($"当前为新新新北欧历时间:\nxxxx年xx月xx日 " + DateTime.Now.ToString("HH时mm分ss秒"));
            }
        }
Beispiel #23
0
        public static async void Search(SoraMessage e, string keyword)
        {
            var search = await CloudMusicApi.SearchSong(keyword);

            if (search != null && search.Length > 0)
            {
                Play(e, search[0].Id);
            }
            else
            {
                await e.ReplyToOriginal("未搜索到相关结果");
            }
        }
        public static async void Normal(SoraMessage e, string id)
        {
            try
            {
                var info = Library.Roll.Model.Logistics.Get(id);
                await e.Reply(info.ToString());

                await e.RemoveCoins(15);
            }
            catch
            {
                await e.ReplyToOriginal("快递详情获取失败,请稍后再试");
            }
        }
Beispiel #25
0
        static async Task <string> GetImageUrl(SoraMessage e)
        {
            var imglist = e.Message.GetAllImage();

            if (imglist.Count <= 0)
            {
                await e.ReplyToOriginal("未检测到任何图片");

                return(null);
            }
            await e.ReplyToOriginal("请稍后");

            return((await e.SoraApi.GetImage(imglist.First().ImgFile)).url);
        }
Beispiel #26
0
        public static async void Normal(SoraMessage e)
        {
            var now = DateTime.Now;

            if ((now - lastUpdated).TotalSeconds >= 60)
            {
                if (!Covid19Api.Update())
                {
                    await e.ReplyToOriginal("数据获取失败,请稍后再试");

                    return;
                }
            }
            await e.Reply(Covid19Api.ToString());
        }
Beispiel #27
0
        public static async void SearchOrigin(SoraMessage e, string poem)
        {
            try
            {
                var result = await Tools.Poem.GetOrigin(SoraMessage.Escape(poem));

                await e.ReplyToOriginal(result);

                await e.RemoveCoins(2);
            }
            catch (Exception ex)
            {
                await e.ReplyToOriginal(ex.Message);
            }
        }
Beispiel #28
0
        public static async void Normal(SoraMessage e, string origin)
        {
            try
            {
                var trans = NBNHHSH.Get(origin);
                if (trans.Length > 0)
                {
                    await e.ReplyToOriginal($"{origin} 的意思可能为" + Environment.NewLine + string.Join(" | ", trans));

                    return;
                }
            }
            catch
            { }
            await e.ReplyToOriginal($"{origin} 未能成功获取到猜测内容");
        }
Beispiel #29
0
 public static async void Normal(SoraMessage e)
 {
     try
     {
         var           h  = Library.Roll.Model.Holiday.Recent();
         StringBuilder sb = new();
         sb.AppendLine("[" + DateTime.Today.ToString("yyyy-MM-dd") + "]");
         sb.Append(h[0].ToString());
         for (var i = 1; i < h.Length; i++)
         {
             sb.AppendLine().Append(h[i].ToString());
         }
         await e.Reply(sb.ToString());
     }
     catch
     {
         await e.Reply("数据获取失败,请稍后再试");
     }
 }
Beispiel #30
0
        public static async void DoublePing(SoraMessage e)
        {
            var receive     = (DateTime.Now - e.Time).TotalMilliseconds;
            var currentTime = DateTime.Now;

            var(status, _) = await e.ReplyToOriginal("Pong!");

            var send = (DateTime.Now - currentTime).TotalMilliseconds;

            if (status == Sora.Enumeration.ApiType.APIStatusType.OK)
            {
                await e.ReplyToOriginal(new StringBuilder()
                                        .AppendLine("[Double Ping Result]")
                                        .AppendLine($"Receive: {receive:F0} ms")
                                        .AppendLine($"Send: {send:F0} ms")
                                        .Append($"Send Status: {status}")
                                        .ToString());
            }
        }