Пример #1
0
        static async Task Main(string[] args)
        {
            LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());
            //建立触发器
            var trigger = TriggerBuilder.Create()
                          .WithCronSchedule("0 * * * * ?")
                          .Build();
            //作业调度池
            var        schedulerFactory = new StdSchedulerFactory();
            IScheduler scheduler        = await schedulerFactory.GetScheduler();

            await scheduler.ScheduleJob(JobBuilder.Create <cycleJob>().Build(), trigger);

            await scheduler.Start();

            //实例化Sora服务器
            var service = SoraServiceFactory.CreateInstance(new ServerConfig()
            {
                Host = "127.0.0.1", Port = 18080
            });

            //连接成功事件
            service.Event.OnClientConnect += (type, eventArgs) =>
            {
                //存储api实例
                StaticEntity.api = eventArgs.SoraApi;

                return(ValueTask.CompletedTask);
            };
            //TODO: 私聊命令处理
            service.Event.OnPrivateMessage += async(sender, eventArgs) =>
            {
            };

            //启动服务并捕捉错误
            await service.StartService().RunCatch(e => Log.Error("Sora Service", Log.ErrorLogBuilder(e)));



            await Task.Delay(-1);
        }
Пример #2
0
        public static void Main(string[] args)
        {
            Testing().Wait();
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            AppDomain.CurrentDomain.UnhandledException   += CurrentDomain_UnhandledException;
            AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
            AppDomain.CurrentDomain.AssemblyResolve      += CurrentDomain_AssemblyResolve;

            new Thread(() => Apis.Program.Main2(args)).Start();
            var tasks = new List <Task>();

            PluginInitialize();

            foreach (var line in File.ReadAllLines("cqservers.txt"))
            {
                var s       = line.Split(":");
                var service = SoraServiceFactory.CreateService(new ClientConfig()
                {
                    Host = s[0],
                    Port = ushort.Parse(s[1])
                });

                service.Event.OnClientConnect  += Event_OnClientConnect;
                service.Event.OnFriendRequest  += Event_OnFriendRequest;
                service.Event.OnGroupMessage   += Event_OnGroupMessage;
                service.Event.OnPrivateMessage += Event_OnPrivateMessage;
                service.Event.OnGroupRequest   += Event_OnGroupRequest;
                service.Event.OnGuildMessage   += Event_OnGuildMessage;

                Console.WriteLine("connected to server");

                tasks.Add(service.StartService().AsTask());
            }

            Task.WaitAll(tasks.ToArray());
        }
        public static async Task Main()
        {
            //[Description(@"^谁是[\u4e00-\u9fa5]+$")] FindChara,//TODO 最后一个PCR功能(
            //修改控制台标题
            Console.Title = @"AntiRain";
            Log.Info("AntiRain初始化", "AntiRain初始化...");
            //初始化配置文件
            Log.Info("AntiRain初始化", "初始化服务器全局配置...");

            if (!ConfigManager.GlobalConfigFileInit() || !ConfigManager.TryGetGlobalConfig(out var globalConfig))
            {
                Log.Fatal("AntiRain初始化", "无法获取用户配置文件");
                Environment.Exit(-1);
                return;
            }

            Log.SetLogLevel(globalConfig.LogLevel);
            //显示Log等级
            Log.Debug("Log Level", globalConfig.LogLevel);

            //初始化资源数据库
            Log.Info("AntiRain初始化", "初始化资源...");
            DatabaseInit.GlobalDataInit();

            //检查是否开启角色数据下载
            //TODO 咕一段时间
            // if (globalConfig.ResourceConfig.UseCharaDatabase)
            // {
            //     //更新PCR角色数据库
            //     CharaParser charaParser = new CharaParser();
            //     if(!await charaParser.UpdateCharaNameByCloud()) Log.Error("AntiRain初始化","更新角色数据库失败");
            // }

            //初始化字符编码
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            //指令匹配初始化
            Command.CommandAdapter.PCRGuildBattlecmdResourseInit();

            //启动机器人WebAPI服务器
            Log.Info("AntiRain初始化", "启动机器人WebAPI服务器...");
            ConsoleInterface = new ConsoleInterface(globalConfig.AntiRainAPILocation, globalConfig.AntiRainAPIPort);

            Log.Info("AntiRain初始化", "启动反向WS服务器...");
            //初始化服务器
            ISoraService server = SoraServiceFactory.CreateService(new ServerConfig
            {
                Host                     = globalConfig.Location,
                Port                     = globalConfig.Port,
                AccessToken              = globalConfig.AccessToken,
                UniversalPath            = globalConfig.UniversalPath,
                HeartBeatTimeOut         = TimeSpan.FromSeconds(globalConfig.HeartBeatTimeOut),
                ApiTimeOut               = TimeSpan.FromMilliseconds(globalConfig.OnebotApiTimeOut),
                SuperUsers               = globalConfig.SuperUsers,
                EnableSoraCommandManager = true
            });

            //服务器回调
            //初始化
            server.Event.OnClientConnect += InitalizationEvent.Initalization;
            //群聊事件
            server.Event.OnGroupMessage += GroupMessageEvent.GroupMessageParse;
            //私聊事件
            server.Event.OnPrivateMessage += PrivateMessageEvent.PrivateMessageParse;
            //群聊戳一戳
            server.Event.OnGroupPoke += GroupPokeEvent.GroupPokeEventParse;
            //关闭连接事件处理
            server.ConnManager.OnCloseConnectionAsync += SubscriptionTimer.DelTimerEvent;
            server.ConnManager.OnHeartBeatTimeOut     += SubscriptionTimer.DelTimerEvent;

            //启动服务器
            await server.StartService().RunCatch(BotUtils.BotCrash);

            await Task.Delay(-1);
        }
Пример #4
0
        public static async Task Connect(long qqId, string ip, ushort port, string authKey, Action <bool, string> ConnectedEvent)
        {
            ////设置log等级
            //Log.LogConfiguration
            //   .EnableConsoleOutput()
            //   .SetLogLevel(LogLevel.Error);

            try
            {
                //实例化Sora服务
                ISoraService service = SoraServiceFactory.CreateService(new ClientConfig()
                {
                    Host = ip, Port = port, AccessToken = authKey
                });
                service.Event.OnGroupMessage   += MessageEvents.Event_OnGroupMessage;
                service.Event.OnPrivateMessage += MessageEvents.Event_OnPrivateMessage;

                //启动服务并捕捉错误
                await service.StartService().RunCatch(e => Log.Error("Sora Service", Log.ErrorLogBuilder(e)));

                service.Event.OnClientConnect += async(eventType, eventArgs) =>
                {
                    SoraApi api = service.GetApi(service.ServiceId);

                    BotInfo.QQId = api.GetLoginUserId();

                    List <FriendInfo> IFriendInfos = (await api.GetFriendList()).friendList;
                    string            nickname     = "未知";

                    var self = IFriendInfos.Where(q => q.UserId == qqId).FirstOrDefault();
                    if (self != null)
                    {
                        nickname = self.Nick;
                    }

                    ConnectedEvent?.Invoke(true, nickname);
                };

                BotInfo.IsLogin = true;

                RssWorker.StartRssTask((msgs, targetId, groupId) =>
                {
                    SoraApi api = service.GetApi(service.ServiceId);
                    if (msgs != null && msgs.Count > 0)
                    {
                        if (msgs.First() is GreenOnionsForwardMessage forwardMessage)
                        {
                            _ = api.SendGroupForwardMsg(targetId, forwardMessage.ToCqHttpForwardMessage());
                        }
                        else
                        {
                            if (targetId != -1)
                            {
                                _ = api.SendGroupMessage(targetId, msgs.ToCqHttpMessages(null));
                            }
                            else if (groupId != -1)
                            {
                                _ = api.SendGroupMessage(groupId, msgs.ToCqHttpMessages(null));
                            }
                        }
                    }
                });


                while (true)
                {
                    BotInfo.IsLogin = true;
                    if (Console.ReadLine() == "exit")
                    {
                        BotInfo.IsLogin = false;
                        PluginManager.Disconnected();
                        ConnectedEvent?.Invoke(false, "");
                        break;
                    }
                    Task.Delay(100).Wait();
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorLog(ex);
                ConnectedEvent(false, ex.Message);
            }
        }