diff --git a/API/BotServiceImpl.cs b/API/BotServiceImpl.cs deleted file mode 100644 index 4774c09..0000000 --- a/API/BotServiceImpl.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Debugger; -using Grpc.Core; - -namespace Shrink.API; - -public class BotServiceImpl : APIService.APIServiceBase -{ - public override Task SendData(DataRequest request, ServerCallContext context) - { - // 模拟向 QQ 机器人处理数据的逻辑 - - // 返回响应 - return Task.FromResult(new DataResponse - { - Message = "114514", - Success = true - }); - } -} \ No newline at end of file diff --git a/Event/BotEventHandler.cs b/Event/BotEventHandler.cs deleted file mode 100644 index 43f79c7..0000000 --- a/Event/BotEventHandler.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Lagrange.Core.Event; -using Shrink.Login; - -namespace Shrink.Event; - -public class BotEventHandler -{ - public BotEventHandler() - { - Console.WriteLine("Bot EventHandler"); - } - private static readonly Lazy _instance = new(() => new BotEventHandler()); - public static BotEventHandler Instance => _instance.Value; - private EventInvoker _invoker = BotService.Instance.Client!.Invoker; - -} \ No newline at end of file diff --git a/Program.cs b/Program.cs index 7116630..38e3409 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,5 @@ -using BotService = Shrink.Login.BotService; +using Shrink.Config; +using Shrink.Service; namespace Shrink; @@ -6,6 +7,8 @@ public static class Program { public static async Task Main() { + await Configuration.Instance.Init(); await BotService.Instance.Login(); + await BotPassiveMsgHandler.Instance.Init(); } } \ No newline at end of file diff --git a/Service/ApiService.cs b/Service/ApiService.cs new file mode 100644 index 0000000..4b1f3fd --- /dev/null +++ b/Service/ApiService.cs @@ -0,0 +1,32 @@ +using Debugger; +using Grpc.Core; +using Shrink.Logger; + +namespace Shrink.Service; + +public class ApiService : APIService.APIServiceBase +{ + private static readonly Lazy _instance = new(() => new ApiService()); + public static ApiService Instance => _instance.Value; + + + public override Task SendData(DataRequest request, ServerCallContext context) + { + LogManager.Instance.LogChain.LogMessage(request.Data, request.Event, request.LogLevel, request.MsgType, + request.Uin, request.Text); + var response = new DataResponse(); + if (LogManager.Instance.IsSent) + { + response.Message = $"已发送至: {request.Uin}。"; + response.Success = true; + } + else + { + response.Message = "未发送,可能的原因是信息被设置为忽略或出现其他问题。"; + response.Success = false; + } + + LogManager.Instance.IsSent = false; + return Task.FromResult(response); + } +} \ No newline at end of file diff --git a/Service/BotPassiveMsgHandler.cs b/Service/BotPassiveMsgHandler.cs new file mode 100644 index 0000000..1359d34 --- /dev/null +++ b/Service/BotPassiveMsgHandler.cs @@ -0,0 +1,38 @@ +using Debugger; +using Lagrange.Core.Common.Interface.Api; +using Lagrange.Core.Event; +using Lagrange.Core.Message; +using Shrink.Config; + +namespace Shrink.Service; + +public class BotPassiveMsgHandler +{ + private static readonly Lazy _instance = new(() => new BotPassiveMsgHandler()); + public static BotPassiveMsgHandler Instance => _instance.Value; + public EventInvoker Invoker { get; } = BotService.Instance.Client!.Invoker; + + public Task Init() + { + Invoker.OnGroupMessageReceived += async (context, @event) => + { + if (!@event.Chain.ToPreviewText().StartsWith("/switchlevel")) return; + var temp = @event.Chain.ToPreviewText()[("/switchlevel".Length + 1)..]; + Configuration.Instance.Config = temp switch + { + "debug" => new Config.Config(LogLevel.Debug), + "info" => new Config.Config(LogLevel.Info), + "verbose" => new Config.Config(LogLevel.Verbose), + "warn" => new Config.Config(LogLevel.Warn), + "error" => new Config.Config(LogLevel.Error), + "fatal" => new Config.Config(LogLevel.Fatal), + _ => Configuration.Instance.Config + }; + await Configuration.Instance.Save(); + var chain = MessageBuilder.Group((uint)@event.Chain.GroupUin!) + .Text($"已将日志输出级别调整为{Configuration.Instance.Config.LogLevel}"); + await context.SendMessage(chain.Build()); + }; + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/Login/BotService.cs b/Service/BotService.cs similarity index 62% rename from Login/BotService.cs rename to Service/BotService.cs index 7313a4e..cb03885 100644 --- a/Login/BotService.cs +++ b/Service/BotService.cs @@ -1,16 +1,15 @@ using System.Text.Json; -using System.Text.Json.Serialization; using Debugger; using Grpc.Core; using Lagrange.Core; using Lagrange.Core.Common; using Lagrange.Core.Common.Interface; using Lagrange.Core.Common.Interface.Api; -using Shrink.API; +using Shrink.Logger; using Shrink.Utility; using Console = System.Console; -namespace Shrink.Login; +namespace Shrink.Service; public class BotService { @@ -24,24 +23,24 @@ public class BotService private static BotDeviceInfo GetDeviceInfo() => - ReadOrCreateJsonFile(DeviceInfoFilePath, BotDeviceInfo.GenerateInfo); - + JsonUtility.ReadOrCreateJsonFile(DeviceInfoFilePath, BotDeviceInfo.GenerateInfo); + // 登录方法 public async Task Login() { const int port = 50051; var server = new Server { - Services = { APIService.BindService(new BotServiceImpl()) }, + Services = { APIService.BindService(new ApiService()) }, Ports = { new ServerPort("localhost", port, ServerCredentials.Insecure) } }; - + var deviceInfo = File.Exists(DeviceInfoFilePath) - ? ReadJsonFromFile(DeviceInfoFilePath) + ? JsonUtility.ReadJsonFromFile(DeviceInfoFilePath) : GetDeviceInfo(); var keyStore = File.Exists(KeystoreFilePath) - ? ReadJsonFromFile(KeystoreFilePath) + ? JsonUtility.ReadJsonFromFile(KeystoreFilePath) : new BotKeystore(); Client = BotFactory.Create(new BotConfig @@ -65,7 +64,9 @@ public class BotService Console.WriteLine(@event.ToString()); _isOnline = true; server.Start(); - Console.WriteLine($"gRPC server listening on port {port}"); + Console.WriteLine($"[{DateTime.Now}] [gRPC Server] [Info]: Listening on port: {port}"); + /*LogManager.Instance.LogChain.LogMessage($"{DateTime.Now}", "LoginEvent", LogLevel.Info, MsgType.Public, + 620902312, "Login");*/ }; Client.Invoker.OnBotOfflineEvent += async (_, @event) => { @@ -92,45 +93,4 @@ public class BotService await File.WriteAllTextAsync(KeystoreFilePath, JsonSerializer.Serialize(Client.UpdateKeystore())); await File.WriteAllTextAsync(DeviceInfoFilePath, JsonSerializer.Serialize(Client.UpdateDeviceInfo())); } - - private static T ReadJsonFromFile(string filePath) - { - try - { - var json = File.ReadAllText(filePath); - return JsonSerializer.Deserialize(json, - new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.Preserve })!; - } - catch (Exception ex) - { - Console.WriteLine($"读取文件出错: {filePath}: {ex.Message}"); - throw; - } - } - - private static T ReadOrCreateJsonFile(string filePath, Func createFunc) - { - if (File.Exists(filePath)) - { - return ReadJsonFromFile(filePath); - } - - var newData = createFunc(); - WriteJsonToFile(filePath, newData); - return newData; - } - - private static void WriteJsonToFile(string filePath, T data) - { - try - { - var json = JsonSerializer.Serialize(data); - File.WriteAllText(filePath, json); - } - catch (Exception ex) - { - Console.WriteLine($"写入文件出错: {filePath}: {ex.Message}"); - throw; - } - } } \ No newline at end of file diff --git a/Shrink.csproj b/Shrink.csproj index 7046785..e90827a 100644 --- a/Shrink.csproj +++ b/Shrink.csproj @@ -17,23 +17,12 @@ + - - - - - - - - - - - - - +