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); }
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); }
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); } }