From d7cf7c0bd736b1be7bca480b5dcd61a2ebb2f77b Mon Sep 17 00:00:00 2001 From: Potion8964 Date: Tue, 12 Nov 2024 18:58:10 +0800 Subject: [PATCH 1/2] Fixed appsettings.json cann't be copied successfully --- Program.cs | 3 +-- YounBot.csproj | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Program.cs b/Program.cs index 81073f3..3f20d0e 100644 --- a/Program.cs +++ b/Program.cs @@ -21,10 +21,9 @@ static void Main(string[] args) if (!File.Exists("appsettings.json")) { - Console.WriteLine("No exist config file, create it now..."); var assm = Assembly.GetExecutingAssembly(); - using var istr = assm.GetManifestResourceStream("Lagrange.OneBot.Resources.appsettings.json")!; + using var istr = assm.GetManifestResourceStream("YounBot.Resources.appsettings.json")!; using var temp = File.Create("appsettings.json"); istr.CopyTo(temp); diff --git a/YounBot.csproj b/YounBot.csproj index 68d5df8..d26802e 100644 --- a/YounBot.csproj +++ b/YounBot.csproj @@ -18,4 +18,9 @@ + + + + + From 14f5b49a87b5feafd2ed1e18aaca9d8bc61595ce Mon Sep 17 00:00:00 2001 From: Potion8964 Date: Wed, 13 Nov 2024 19:05:15 +0800 Subject: [PATCH 2/2] Added login by qrcode & password --- Login/QrCodeLogin.cs | 41 ++++++++++++++++++++++++++ Program.cs | 24 +++++++--------- YounBotApp.cs | 15 ++++------ YounBotAppBuilder.cs | 68 ++++++++++++++++++-------------------------- 4 files changed, 84 insertions(+), 64 deletions(-) create mode 100644 Login/QrCodeLogin.cs diff --git a/Login/QrCodeLogin.cs b/Login/QrCodeLogin.cs new file mode 100644 index 0000000..4f54ec4 --- /dev/null +++ b/Login/QrCodeLogin.cs @@ -0,0 +1,41 @@ +using Lagrange.Core; +using Lagrange.Core.Common; +using Lagrange.Core.Common.Interface; +using Lagrange.Core.Common.Interface.Api; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Console = System.Console; +using JsonSerializer = System.Text.Json.JsonSerializer; + +namespace YounBot.Login; + +public static class QrCodeLogin +{ + public static async Task Login(YounBotApp app, BotConfig config, BotDeviceInfo deviceInfo, BotKeystore keystore) + { + app.Client = BotFactory.Create(config, deviceInfo, keystore); + var client = app.Client; + + client.Invoker.OnBotLogEvent += (_, @event) => { + Console.WriteLine(@event.ToString()); + }; + + client.Invoker.OnBotOnlineEvent += (_, @event) => + { + Console.WriteLine(@event.ToString()); + client.UpdateKeystore(); + File.WriteAllText(app.Configuration["ConfigPath:Keystore"] ?? "keystore.json", JsonSerializer.Serialize(keystore)); + }; + + if (!await app.Client.LoginByPassword()) + { + var qrCode = await client.FetchQrCode(); + + if (qrCode != null) + { + await File.WriteAllBytesAsync("qrcode.png", qrCode.Value.QrCode); + await app.Client.LoginByQrCode(); + } + } + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index 3f20d0e..f30b6e4 100644 --- a/Program.cs +++ b/Program.cs @@ -6,13 +6,13 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using YounBot.Login; namespace YounBot; class Program { - static void Main(string[] args) - { + public static async Task Main() { // thanks to Lagrange.OneBot Console.OutputEncoding = Encoding.UTF8; Console.InputEncoding = Encoding.UTF8; @@ -33,25 +33,21 @@ static void Main(string[] args) Console.WriteLine("Please Edit the appsettings.json to set configs and press any key to continue"); Console.ReadLine(); } - - // 创建IServiceCollection实例 - var services = new ServiceCollection(); + // 创建IConfiguration实例 var configurationBuilder = new ConfigurationBuilder() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile("appsettings.json", false, true) .AddEnvironmentVariables(); var configuration = configurationBuilder.Build(); - // 创建YounBotAppBuilder实例 - var appBuilder = new YounBotAppBuilder(services, configuration); - + var appBuilder = new YounBotAppBuilder(configuration); + var app = appBuilder.Build(); // 配置应用程序 - appBuilder - .ConfigureBots() - .ConfigureLogging(logging => logging.AddConsole()); + appBuilder.ConfigureBots(); + + //登录 + await QrCodeLogin.Login(app, appBuilder.GetConfig(), appBuilder.GetDeviceInfo(), appBuilder.GetKeystore()); - // 构建应用程序 - var app = appBuilder.Build(); } } \ No newline at end of file diff --git a/YounBotApp.cs b/YounBotApp.cs index b7a4d86..cffa772 100644 --- a/YounBotApp.cs +++ b/YounBotApp.cs @@ -1,16 +1,11 @@ -using Microsoft.Extensions.Configuration; +using Lagrange.Core; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace YounBot; -public class YounBotApp +public class YounBotApp(YounBotAppBuilder appBuilder) { - public IServiceCollection Services; - public IConfiguration Configuration; - - public YounBotApp(YounBotAppBuilder builder) - { - Services = builder.GetServices(); - Configuration = builder.GetConfiguration(); - } + public readonly IConfiguration Configuration = appBuilder.GetConfiguration(); + public BotContext? Client; } \ No newline at end of file diff --git a/YounBotAppBuilder.cs b/YounBotAppBuilder.cs index 495b3d9..9391f13 100644 --- a/YounBotAppBuilder.cs +++ b/YounBotAppBuilder.cs @@ -1,5 +1,8 @@ +using System.Text.Json.Serialization; +using Lagrange.Core; using Lagrange.Core.Common; using Lagrange.Core.Common.Interface; +using Lagrange.Core.Common.Interface.Api; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -7,40 +10,36 @@ namespace YounBot; -public sealed class YounBotAppBuilder +public sealed class YounBotAppBuilder(IConfiguration configuration) { - private IServiceCollection Services; - - private IConfiguration Configuration; - - public YounBotAppBuilder(IServiceCollection services, IConfiguration configuration) - { - Services = services; - Configuration = configuration; - } + private BotDeviceInfo _deviceInfo; + private BotKeystore _keystore; + private BotConfig _botConfig; - public IServiceCollection GetServices() => Services; - public IConfiguration GetConfiguration() => Configuration; - - public YounBotAppBuilder ConfigureBots() + public IConfiguration GetConfiguration() => configuration; + public BotDeviceInfo GetDeviceInfo() => _deviceInfo; + public BotKeystore GetKeystore() => _keystore; + public BotConfig GetConfig() => _botConfig; + + public void ConfigureBots() { - string keystorePath = Configuration["ConfigPath:Keystore"] ?? "keystore.json"; - string deviceInfoPath = Configuration["ConfigPath:DeviceInfo"] ?? "device.json"; + string keystorePath = configuration["ConfigPath:Keystore"] ?? "keystore.json"; + string deviceInfoPath = configuration["ConfigPath:DeviceInfo"] ?? "device.json"; - bool isSuccess = Enum.TryParse(Configuration["Account:Protocol"], out var protocol); - var config = new BotConfig + bool isSuccess = Enum.TryParse(configuration["Account:Protocol"], out var protocol); + + _botConfig = new BotConfig { Protocol = isSuccess ? protocol : Protocols.Linux, - AutoReconnect = bool.Parse(Configuration["Account:AutoReconnect"] ?? "true"), - UseIPv6Network = bool.Parse(Configuration["Account:UseIPv6Network"] ?? "false"), - GetOptimumServer = bool.Parse(Configuration["Account:GetOptimumServer"] ?? "true"), - AutoReLogin = bool.Parse(Configuration["Account:AutoReLogin"] ?? "true"), + AutoReconnect = bool.Parse(configuration["Account:AutoReconnect"] ?? "true"), + UseIPv6Network = bool.Parse(configuration["Account:UseIPv6Network"] ?? "false"), + GetOptimumServer = bool.Parse(configuration["Account:GetOptimumServer"] ?? "true"), + AutoReLogin = bool.Parse(configuration["Account:AutoReLogin"] ?? "true"), }; - - BotKeystore keystore; + if (!File.Exists(keystorePath)) { - keystore = new BotKeystore(); + _keystore = new BotKeystore(); string? directoryPath = Path.GetDirectoryName(keystorePath); if (!string.IsNullOrEmpty(directoryPath)) { @@ -49,14 +48,13 @@ public YounBotAppBuilder ConfigureBots() } else { - keystore = JsonSerializer.Deserialize(File.ReadAllText(keystorePath)) ?? new BotKeystore(); + _keystore = JsonSerializer.Deserialize(File.ReadAllText(keystorePath)) ?? new BotKeystore(); } - BotDeviceInfo deviceInfo; if (!File.Exists(deviceInfoPath)) { - deviceInfo = BotDeviceInfo.GenerateInfo(); - string json = JsonSerializer.Serialize(deviceInfo); + _deviceInfo = BotDeviceInfo.GenerateInfo(); + string json = JsonSerializer.Serialize(_deviceInfo); string? directoryPath = Path.GetDirectoryName(deviceInfoPath); if (!string.IsNullOrEmpty(directoryPath)) { @@ -66,18 +64,8 @@ public YounBotAppBuilder ConfigureBots() } else { - deviceInfo = JsonSerializer.Deserialize(File.ReadAllText(deviceInfoPath)) ?? BotDeviceInfo.GenerateInfo(); + _deviceInfo = JsonSerializer.Deserialize(File.ReadAllText(deviceInfoPath)) ?? BotDeviceInfo.GenerateInfo(); } - - Services.AddSingleton(BotFactory.Create(config, deviceInfo, keystore)); - - return this; - } - - public YounBotAppBuilder ConfigureLogging(Action configureLogging) - { - Services.AddLogging(configureLogging); - return this; } public YounBotApp Build() => new(this);