Skip to content

Commit

Permalink
fix(plugins/autologinplugin/): 无法自动登录
Browse files Browse the repository at this point in the history
  • Loading branch information
yiyungent committed Jan 23, 2023
1 parent fbbcaa9 commit ad3ac98
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 23 deletions.
115 changes: 93 additions & 22 deletions plugins/AutoLoginPlugin/AutoLoginPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,42 @@
using System.IO;
using PluginCore;
using KonataPlugin;
using PluginCore.Interfaces;

namespace AutoLoginPlugin
{
public class AutoLoginPlugin : BasePlugin, ITimeJobPlugin
public class AutoLoginPlugin : BasePlugin, ITimeJobPlugin, IQQBotPlugin
{

#region Fields

/// <summary>
/// 1min
/// </summary>
public long SecondsPeriod => 60;

private readonly IPluginFinder _pluginFinder;

private readonly bool _debug;

#endregion

#region Ctor
public AutoLoginPlugin(IPluginFinder pluginFinder)
{
_pluginFinder = pluginFinder;
string debugStr = KonataPlugin.Utils.EnvUtil.GetEnv("DEBUG");
if (!string.IsNullOrEmpty(debugStr) && bool.TryParse(debugStr, out bool debug))
{
_debug = debug;
}
else
{
_debug = false;
}
}
#endregion

public override (bool IsSuccess, string Message) AfterEnable()
{
Console.WriteLine($"{nameof(AutoLoginPlugin)}: {nameof(AfterEnable)}");
Expand All @@ -44,11 +70,16 @@ public async Task ExecuteAsync()
try
{
SettingsModel settingsModel = PluginCore.PluginSettingsModelFactory.Create<SettingsModel>(nameof(AutoLoginPlugin));
string filePath = Path.Combine(PluginPathProvider.PluginsRootPath(), nameof(AutoLoginPlugin), "BotKeyStore.json");
//string filePath = Path.Combine(PluginPathProvider.PluginsRootPath(), nameof(AutoLoginPlugin), "BotKeyStore.json");
if (KonataBotStore.Bot != null && KonataBotStore.Bot.IsOnline() && KonataBotStore.Bot.KeyStore != null)
{
string jsonStr = KonataPlugin.Utils.JsonUtil.Obj2JsonStr(KonataBotStore.Bot.KeyStore);
File.WriteAllText(filePath, contents: jsonStr, Encoding.UTF8);
// 将正常上线状态下的 KeyStore 保存下来

//string jsonStr = KonataPlugin.Utils.JsonUtil.Obj2JsonStr(KonataBotStore.Bot.KeyStore);
//File.WriteAllText(filePath, contents: jsonStr, Encoding.UTF8);
var konataPluginOldSettings = KonataPlugin.Utils.SettingsUtil.Get(nameof(KonataPlugin));
konataPluginOldSettings.BotKeyStore = KonataBotStore.Bot.KeyStore;
KonataPlugin.Utils.SettingsUtil.Set(nameof(KonataPlugin), konataPluginOldSettings);
}
// 取消: 发现这么调用, 会触发验证, 而直接 用 BotKeyStore new 一个, 就不会(好多次这样都没有验证)
//else if (QQBotStore.Bot != null && !QQBotStore.Bot.IsOnline())
Expand All @@ -59,18 +90,22 @@ public async Task ExecuteAsync()
//}
else
{
if (File.Exists(filePath))
#region 重新 new
//string jsonStr = File.ReadAllText(filePath, Encoding.UTF8);
//BotKeyStore botKeyStore = KonataPlugin.Utils.JsonUtil.JsonStr2Obj<BotKeyStore>(jsonStr);
var konataPluginOldSettings = KonataPlugin.Utils.SettingsUtil.Get(nameof(KonataPlugin));
// 再利用之前保存的 KeyStore 重新创建机器人并登录上线
if (konataPluginOldSettings.BotKeyStore != null)
{
#region 重新 new
string jsonStr = File.ReadAllText(filePath, Encoding.UTF8);
BotKeyStore botKeyStore = KonataPlugin.Utils.JsonUtil.JsonStr2Obj<BotKeyStore>(jsonStr);
KonataBotStore.Bot = BotFather.Create(BotConfig.Default(), BotDevice.Default(), botKeyStore);
#endregion
// 由于匿机后, 对象内存数据全丢失, 只能重新创建
//KonataBotStore.Bot = BotFather.Create(BotConfig.Default(), BotDevice.Default(), konataPluginOldSettings.BotKeyStore);

#region 重新登录
await Login(settingsModel);
await Login(settingsModel, konataPluginOldSettings);
#endregion
}
#endregion

}
}
catch (Exception ex)
Expand All @@ -81,30 +116,66 @@ public async Task ExecuteAsync()
await Task.CompletedTask;
}

private static async Task Login(SettingsModel settingsModel)
private async Task Login(SettingsModel settingsModel, KonataPlugin.SettingsModel konataPluginOldSettings)
{
bool isLoginSuccess = false;
try
{
isLoginSuccess = await KonataBotStore.Bot.Login();
//isLoginSuccess = await KonataBotStore.Bot.Login();
var konataPluginHomeController = new KonataPlugin.Controllers.HomeController(_pluginFinder);
// 注意: 这里无法获取是否已经登录成功完成上线
// 直接用 此插件的登录方法不容易出错
var responseModel = await konataPluginHomeController.Login(new KonataPlugin.RequestModels.LoginRequestModel
{
LoginType = "config",
BotKeyStore = KonataPlugin.Utils.JsonUtil.Obj2JsonStr(konataPluginOldSettings.BotKeyStore)
});
//if (responseModel.Code=)
//{

//}
}
catch (Exception ex)
{
Console.WriteLine("重新登录出错:");
Console.WriteLine(ex.ToString());
}
if (isLoginSuccess)
{
if (!string.IsNullOrEmpty(settingsModel.AdminQQ) && uint.TryParse(settingsModel.AdminQQ, out uint adminUin))
{
await KonataBotStore.Bot.SendFriendMessage(friendUin: adminUin, "自动重新登录成功");
}
}
else
//if (isLoginSuccess)
//{
// if (!string.IsNullOrEmpty(settingsModel.AdminQQ) && uint.TryParse(settingsModel.AdminQQ, out uint adminUin))
// {
// await KonataBotStore.Bot.SendFriendMessage(friendUin: adminUin, "自动重新登录成功");
// }
//}
//else
//{
// Console.WriteLine("重新登录失败");
//}
}

public void OnGroupMessage((Bot s, GroupMessageEvent e) obj, string message, string groupName, uint groupUin, uint memberUin)
{

}

public void OnFriendMessage((Bot s, FriendMessageEvent e) obj, string message, uint friendUin)
{

}

public async void OnBotOnline((Bot s, BotOnlineEvent e) obj, string botName, uint botUin)
{
SettingsModel settingsModel = PluginCore.PluginSettingsModelFactory.Create<SettingsModel>(nameof(AutoLoginPlugin));
if (!string.IsNullOrEmpty(settingsModel.AdminQQ) && uint.TryParse(settingsModel.AdminQQ, out uint adminUin))
{
Console.WriteLine("重新登录失败");
await KonataBotStore.Bot.SendFriendMessage(friendUin: adminUin, "自动重新登录成功");
}
}

public void OnBotOffline((Bot s, BotOfflineEvent e) obj, string botName, uint botUin)
{

}
#endregion


Expand Down
3 changes: 3 additions & 0 deletions plugins/AutoLoginPlugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@


<!-- Matomo Image Tracker-->
<img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.moeci.com/matomo.php?idsite=2&amp;rec=1&amp;action_name=Plugins.AutoLoginPlugin.README" style="border:0" alt="" />
<!-- End Matomo -->
2 changes: 1 addition & 1 deletion plugins/AutoLoginPlugin/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"DisplayName": "自动重新登录插件",
"Description": "出现异常离线后,自动重新登录",
"Author": "yiyun",
"Version": "0.1.0",
"Version": "0.1.1",
"SupportedVersions": [ "0.0.1" ]
}

0 comments on commit ad3ac98

Please sign in to comment.