public void Process(ISendMessageService service, MessageInfo message) { if (!message.IsGroupMessage) { service.SendToFriend(message.UserMember, "暂不支持好友互动!"); return; } var args = message.Content.ToString().Split(' '); if (args.Length == 1) { service.SendToGroup(message.GroupNumber, "使用方法: 查询 <Youtube Id>"); return; } var videos = YoutubeApi.GetVideosByChannelId(args[1]); if (videos.All(v => !v.IsLive)) { service.SendToGroup(message.GroupNumber, "该频道目前没有直播"); return; } var live = videos.First(v => v.IsLive); service.SendToGroup(message.GroupNumber, $"频道 {live.ChannelTitle} 当前正在直播中\r\n" + $"Title: {live.Title}\r\n" + $"Description: {live.Description}\r\n" + $"Link: {live.VideoLink}"); }
public virtual void Process(ISendMessageService service, MessageInfo message) { var methods = GetType().GetMethods().Where(v => v.IsDefined(typeof(RobotCommandAttribute), false)); var atts = methods.Select(v => v.GetCustomAttributes(false).First(att => att.GetType() == typeof(RobotCommandAttribute))) .Select(v => (RobotCommandAttribute)v); var handled = false; var args = message.Content.ToString().Trim().Split(' '); foreach (var method in methods) { var attr = method.GetCustomAttributes(false); var commandAttr = attr.FirstOrDefault(v => v.GetType() == typeof(RobotCommandAttribute)); if (commandAttr != null) { var info = (RobotCommandAttribute)commandAttr; if (args.Length == info.ProcessLength || info.ProcessLength == 0) { if (!string.IsNullOrEmpty(info.SubCommandName)) { if (args.Length <= info.SubCommandOffset) { continue; } if (!StringTools.EqualsIgnoreCase(args[info.SubCommandOffset], info.SubCommandName)) { continue; } } else { if (atts.Any(v => !string.IsNullOrEmpty(v.SubCommandName) && args.Length > v.SubCommandOffset && args[v.SubCommandOffset] == v.SubCommandName)) { continue; } } try { handled = true; method.Invoke(this, new object[] { message, args }); } catch (Exception ex) { LogHelper.Error("处理消息时出现未知异常 包名:" + GetType() + " 函数名: " + method.Name, true, ex); service.SendToGroup(message.GroupNumber, $"处理请求时出现未知异常: {ex.Message} 处理函数: {method.Name}"); } } } } if (!handled) { ShowHelpMessage(message, args); } }
public void NextPageCommand(MessageInfo message, string[] args) { if (NextPageAction == null) { _service.SendToGroup(message.GroupNumber, "已经到底了~"); return; } NextPageAction(); }
public static void SendImageToGroup(this ISendMessageService service, long groupId, byte[] bytes) { var image = new TextSnippet() { Type = MessageType.Picture }; image.Set("data", bytes); service.SendToGroup(groupId, image); }
public void Process(ISendMessageService service, MessageInfo message) { if (!message.IsGroupMessage) { service.SendToFriend(message.UserMember, "暂不支持好友互动!"); return; } service.SendToGroup(message.GroupNumber, "====== Vtuber天狗机器人功能菜单 ====== \r\n!Timeline 查看放送时间表\r\n" + "!订阅 添加群内事件订阅\r\n" + "!vtuber 查看数据库中的vtuber信息\r\n" + "!直播 查看直播信息"); }
public void Process(ISendMessageService service, MessageInfo message) { if (!message.IsGroupMessage) { service.SendToFriend(message.UserMember, "暂不支持好友互动!"); return; } var args = message.Content.ToString().Split(' '); if (args.Length == 1) { service.SendToGroup(message.GroupNumber, "使用方法: 查询会社 <会社名>"); return; } //TODO: 会社名->OfficeName 从文件读取 var officeName = string.Empty; switch (args[1]) { case "hololive": case "homolive": case "ホロライブ": officeName = "cover"; break; } if (string.IsNullOrEmpty(officeName)) { service.SendToGroup(message.GroupNumber, "未知会社"); return; } var info = UserLocalApi.GetOfficeInfo(officeName); service.SendToGroup(message.GroupNumber, $"会社名: {info.OfficeName}\r\n" + $"旗下Vtuber数: {info.ChannelCount}\r\n" + $"总关注量: {info.TotalFanCount}\r\n" + $"平均关注: {info.AvgFanCount}"); }
public void Process(ISendMessageService service, MessageInfo message) { if (!message.IsGroupMessage) { service.SendToFriend(message.UserMember, "暂不支持好友互动!"); return; } var start = 0; var end = 3; if (message.Content.ToString().Trim().Split(' ').Length == 2) { start = int.Parse(message.Content.ToString().Split(' ').Last().Split('-').First()) - 1; end = int.Parse(message.Content.ToString().Split(' ').Last().Split('-').Last()) - 1; if (start == -1) { start = 0; } } var timeLine = CacheManager.Manager.LastCheckTimeline; if (end > timeLine.Count - 1) { end = timeLine.Count - 1; } if (end - start > 5) { end = start + 5; } var msg = $"时间线({start+1}-{end+1}) 共 {timeLine.Count} 条记录"; for (int i = start; i <= end; i++) { var info = timeLine[i]; msg += $"\r\n放送时间: {info.LiveTime.Month}月{info.LiveTime.Day}日 {info.LiveTime.Hour}时{info.LiveTime.Minute}分 (预定)"; msg += $"\r\n标题: {info.Title} 放送者: {info.VTuber}"; } service.SendToGroup(message.GroupNumber, msg); }
public override void Process(ISendMessageService service, MessageInfo message) { if (!message.IsGroupMessage) { service.SendToFriend(message.UserMember, "暂不支持好友互动!"); return; } base.Process(service, message); var args = message.Content.ToString().Split(' '); if (args.Length == 1) { var str = "当前直播列表: \r\n"; str += string.Join("\r\n", CacheManager.Manager.LastCheckLiveStatus.ToArray().Where(v => v.Value.IsLive).Select(video => video.Key.OriginalName + " 在 " + video.Value.VideoLink + " 直播中")); str += "\r\n"; str += string.Join("\r\n", CacheManager.Manager.LastCheckLiveBStatus.ToArray().Where(v => v.Value.AreLive) .Select(v => v.Value.Username + " 在 " + v.Value.LiveUrl + " 直播中")); service.SendToGroup(message.GroupNumber, str); } }
public void Process(ISendMessageService service, MessageInfo message) { if (!message.IsGroupMessage) { service.SendToFriend(message.UserMember, "暂不支持好友互动!"); return; } var args = message.Content.ToString().Split(' '); if (args.Length != 3 && args.Length != 4 && args.Length != 2) { service.SendToGroup(message.GroupNumber, "使用方法: !订阅 <添加/查看/取消> <发推/转推/回推/油管开播/油管上传/B站开播> <Vtuber名字>"); return; } if (!Config.DefaultConfig.Subscribes.ContainsKey(message.GroupNumber)) { Config.DefaultConfig.Subscribes.Add(message.GroupNumber, new List <SubscribeConfig>()); } var configs = Config.DefaultConfig.Subscribes[message.GroupNumber]; if (args.Last() == "查看") { var str = "本群订阅列表:\r\n"; str += string.Join(',', configs.Where(v => v.BeginLive || v.PublishTweet || v.ReplyTweet || v.Retweeted || v.UploadVideo).Select(v => v.VtuberName)); service.SendToGroup(message.GroupNumber, str); return; } var vtuberName = args[1] == "查看" ? args[2] : args[3]; var vtuber = Config.DefaultConfig.GetVtuber(vtuberName); if (vtuber == null) { service.SendToGroup(message.GroupNumber, $"未知Vtuber {vtuberName} !"); return; } vtuberName = vtuber.OriginalName; if (configs.All(v => !v.VtuberName.EqualsIgnoreCase(vtuberName))) { configs.Add(new SubscribeConfig() { VtuberName = vtuberName }); } var config = configs.First(v => string.Equals(v.VtuberName, vtuber.OriginalName, StringComparison.CurrentCultureIgnoreCase)); if (args[1] == "查看") { service.SendToGroup(message.GroupNumber, $"==== 本群{config.VtuberName}订阅状态 ====\r\n" + $"推特发推: {config.PublishTweet}\r\n" + $"推特转推: {config.Retweeted}\r\n" + $"推特回推: {config.ReplyTweet}\r\n" + $"油管上传: {config.UploadVideo}\r\n" + $"油管开播: {config.BeginLive}\r\n" + $"B站开播: {config.BilibiliBeginLive}"); return; } if (args[1] == "添加") { switch (args[2].ToLower()) { case "发推": config.PublishTweet = true; break; case "转推": config.Retweeted = true; break; case "回推": config.ReplyTweet = true; break; case "油管开播": config.BeginLive = true; break; case "油管上传": config.UploadVideo = true; break; case "b站开播": if (vtuber.BilibiliUserId == default(long)) { service.SendToGroup(message.GroupNumber, "该Vtuber未绑定B站搬运,请使用!Vtuber 设置中文名 来绑定"); return; } config.BilibiliBeginLive = true; break; default: service.SendToGroup(message.GroupNumber, $"未知订阅"); return; } service.SendToGroup(message.GroupNumber, $"成功订阅"); Config.SaveToDefaultFile(Config.DefaultConfig); return; } if (args[1] == "取消") { switch (args[2].ToLower()) { case "发推": config.PublishTweet = false; break; case "转推": config.Retweeted = false; break; case "回推": config.ReplyTweet = false; break; case "油管开播": config.BeginLive = false; break; case "油管上传": config.UploadVideo = false; break; case "b站开播": config.BilibiliBeginLive = false; break; default: service.SendToGroup(message.GroupNumber, $"未知订阅"); return; } service.SendToGroup(message.GroupNumber, $"成功取消"); Config.SaveToDefaultFile(Config.DefaultConfig); return; } }