示例#1
0
        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}");
        }
示例#2
0
        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);
            }
        }
示例#3
0
 public void NextPageCommand(MessageInfo message, string[] args)
 {
     if (NextPageAction == null)
     {
         _service.SendToGroup(message.GroupNumber, "已经到底了~");
         return;
     }
     NextPageAction();
 }
示例#4
0
        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);
        }
示例#5
0
 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" +
                         "!直播 查看直播信息");
 }
示例#6
0
        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}");
        }
示例#7
0
        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);
        }
示例#8
0
        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);
            }
        }
示例#9
0
        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;
            }
        }