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} 的更新日志"); } }
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("订阅项目因未知原因导致移除失败,请稍后重试"); } }); }
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("数据获取失败,请稍后再试"); } }
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); }
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()); } }
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("考完啦,放松一下吧"); } }
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); }
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("因未知原因导致功能禁用失败,请稍后重试"); } }); }
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())); } }
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("本群目前不存在提示信息"); } }
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("数据获取失败,请稍后再试"); } }
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); } }
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()); } }
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); } }
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())); } }
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("因未知原因导致功能启用失败,请稍后重试"); } }); } }
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); }
public static async void Another(SoraMessage e) { try { await e.Reply(Tools.Hitokoto.GetAnother()); } catch { await e.Reply("毒一言获取失败,请稍后再试"); } }
public static async void Normal(SoraMessage e) { try { await e.Reply(Tools.Hitokoto.Get().ToString()); } catch { await e.Reply("一言获取失败,请稍后再试"); } }
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} 的提示消息"); }
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("操作失败"); } }
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秒")); } }
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("快递详情获取失败,请稍后再试"); } }
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); }
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()); }
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); } }
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} 未能成功获取到猜测内容"); }
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("数据获取失败,请稍后再试"); } }
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()); } }