Skip to content
This repository was archived by the owner on May 11, 2022. It is now read-only.

Commit

Permalink
关闭错误提醒;增加风控检测
Browse files Browse the repository at this point in the history
  • Loading branch information
skykeyjoker committed Apr 10, 2022
1 parent 4774470 commit ba88e98
Show file tree
Hide file tree
Showing 12 changed files with 187 additions and 172 deletions.
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@

为应对B站接口限制,目前查询为30秒/次,因此消息推送可能会有较短延迟(最大延迟1min左右)。

注:本插件为控制台程序(Console Application),无界面无托盘。可以通过查询`ASoulNotification.exe`进程检查插件运行状态。

注:叔叔有风控系统,有时同一局域网请求过多,即使是30s一次查询也会因为服务器过载保护被掐。插件出错6次自动退出后,可以自行前往`logs`文件夹内的日志文件验证是否为这种情况(一般错误提示是远程关闭了访问)。此时可以**等待半小时左右**重新开启插件。
> 注:本插件为控制台程序(Console Application),无界面无托盘。可以通过查询`ASoulNotification.exe`进程检查插件运行状态。
>
> 注:叔叔有风控系统,有时同一局域网请求过多,即使是30s一次查询也会因为服务器过载保护被掐。插件检测到被服务器风控后会自动休眠30min。
>
> 注:插件开启了日志系统,可以自行前往`logs`文件夹查看日志文件(反馈BUG请提交log,秋梨膏)。
[功能介绍](#功能介绍)|[使用教程](#使用教程)|[下载地址](#下载地址)|[友情链接](#友情链接)

Expand All @@ -39,11 +41,11 @@



### 运行出错提醒
### 风控提醒

运行中出现错误会发出相应提醒
运行中出现检测到服务器风控会自动睡眠30min并发出相应提醒

![](https://cdn.jsdelivr.net/gh/skykeyjoker/A-Soul-Notification@master/screenshots/error.png)
![](https://cdn.jsdelivr.net/gh/skykeyjoker/A-Soul-Notification@master/screenshots/sleep.png)



Expand Down
Binary file added screenshots/overload.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
89 changes: 52 additions & 37 deletions src/ASoulNotification.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,18 @@ QString checkForUpdate(const QString& version, std::shared_ptr<spdlog::logger>&
try {
remoteVersion = QString::fromStdString(j["versions"][0]["version"].get<std::string>());
remoteUrl = QString::fromStdString(j["versions"][0]["url"].get<std::string>());
} catch (Json::exception& ex) {
qDebug() << "Update info json can not be parsed. Exception occurred:" << ex.what();
logger->error("Update Error. Update info json can not be parsed. Exception Occurred: {}", ex.what());
return retUrlStr;
} catch (...) {
qDebug() << "Update info json can not be parsed.";
logger->error("Update Error. Update info json can not be parsed.");
return retUrlStr;
}

qDebug() << remoteUrl << remoteVersion << QString("v" + version);
logger->info("Romote Version: {}, Remote Url: {}", remoteVersion.toStdString(), remoteUrl.toStdString());
logger->info("Remote Version: {}, Remote Url: {}", remoteVersion.toStdString(), remoteUrl.toStdString());
if (QString("v" + version).compare(remoteVersion) != 0)// 本地版本与远程版本不同
{
retUrlStr = remoteUrl;
Expand Down Expand Up @@ -228,34 +232,50 @@ int main(int argc, char* argv[]) {
main_logger->flush();
exit(1);// 立即退出程序
} else {
// 赋值memberMap
auto bilibiliArr = m_json["Bilibili"]["member"];
for (int i = 0; i < bilibiliArr.size(); ++i) {
int uid = bilibiliArr[i]["uid"].get<int>();
QString nickName = QString::fromStdString(bilibiliArr[i]["nickname"].get<std::string>());
QString avatar = QString::fromStdString(bilibiliArr[i]["avatar"].get<std::string>());
uid_list << QString::number(uid);
bilibiliMemberMap[uid]["nickname"] = nickName;
bilibiliMemberMap[uid]["avatar"] = avatar;
qDebug() << uid << nickName << avatar;
}
try {
// 赋值memberMap
auto bilibiliArr = m_json["Bilibili"]["member"];
for (int i = 0; i < bilibiliArr.size(); ++i) {
int uid = bilibiliArr[i]["uid"].get<int>();
QString nickName = QString::fromStdString(bilibiliArr[i]["nickname"].get<std::string>());
QString avatar = QString::fromStdString(bilibiliArr[i]["avatar"].get<std::string>());
uid_list << QString::number(uid);
bilibiliMemberMap[uid]["nickname"] = nickName;
bilibiliMemberMap[uid]["avatar"] = avatar;
qDebug() << uid << nickName << avatar;
}

auto enableDouyin = m_json["Douyin"]["enable"].get<bool>();
if (enableDouyin) {
auto douyinArr = m_json["Douyin"]["member"];
for (int i = 0; i < douyinArr.size(); ++i) {
QString uid = QString::fromStdString(douyinArr[i]["uid"].get<std::string>());
QString sec_uid = QString::fromStdString(douyinArr[i]["sec_uid"].get<std::string>());
QString nickName = QString::fromStdString(douyinArr[i]["nickname"].get<std::string>());
QString avatar = QString::fromStdString(douyinArr[i]["avatar"].get<std::string>());
sec_uid_list << sec_uid;
douyinMemberMap[uid]["nickname"] = nickName;
douyinMemberMap[uid]["avatar"] = avatar;
qDebug() << uid << sec_uid << nickName << avatar;
auto enableDouyin = m_json["Douyin"]["enable"].get<bool>();
if (enableDouyin) {
auto douyinArr = m_json["Douyin"]["member"];
for (int i = 0; i < douyinArr.size(); ++i) {
QString uid = QString::fromStdString(douyinArr[i]["uid"].get<std::string>());
QString sec_uid = QString::fromStdString(douyinArr[i]["sec_uid"].get<std::string>());
QString nickName = QString::fromStdString(douyinArr[i]["nickname"].get<std::string>());
QString avatar = QString::fromStdString(douyinArr[i]["avatar"].get<std::string>());
sec_uid_list << sec_uid;
douyinMemberMap[uid]["nickname"] = nickName;
douyinMemberMap[uid]["avatar"] = avatar;
qDebug() << uid << sec_uid << nickName << avatar;
}
}
}

main_logger->info("Member Json loaded successfully. Douyin Mode:{}", enableDouyin);
main_logger->info("Member Json loaded successfully. Douyin Mode:{}", enableDouyin);
} catch (Json::exception& ex) {
qDebug() << "解析member.json失败,发生异常" << ex.what();
main_logger->error("解析member.json失败,发生异常:{}", ex.what());
m_file.close();

main_logger->flush();
exit(1);
} catch (...) {
qDebug() << "解析member.json失败,发生未知异常";
main_logger->error("解析member.json失败,发生未知异常");
m_file.close();

main_logger->flush();
exit(1);
}
}
} else {
qDebug() << "Member json can not be opened.";
Expand Down Expand Up @@ -333,14 +353,14 @@ int main(int argc, char* argv[]) {
}
});

// 错误提醒
QObject::connect(&queryCenter, &QueryCenter::newErrorMessage, [&](QString message) {
main_logger->error("新错误信号,启动错误提醒Wintoast。错误信息:{}", message.toStdString());
// 风控消息提醒
QObject::connect(&queryCenter, &QueryCenter::newOverLoadMessage, [&](QString message) {
main_logger->error("风控信号,启动风控提醒Wintoast。错误信息:{}", message.toStdString());

WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
QString imagePath = app.applicationDirPath() + "/avatar/error.png";
QString imagePath = app.applicationDirPath() + "/avatar/sleep.png";
templ.setImagePath(imagePath.toStdWString());
templ.setTextField(L"插件发生错误", WinToastTemplate::FirstLine);
templ.setTextField(L"检测到服务器风控", WinToastTemplate::FirstLine);
templ.setTextField(message.toStdWString(), WinToastTemplate::SecondLine);
templ.setExpiration(0);
templ.setAudioPath(WinToastTemplate::AudioSystemFile::DefaultSound);
Expand All @@ -349,14 +369,9 @@ int main(int argc, char* argv[]) {
if (WinToast::instance()->showToast(templ, new CustomHandler(0)) < 0) {
//QMessageBox::warning(this, "Error", "Could not launch your toast notification!");
qDebug() << "Could not launch your toast notification!";
main_logger->error("错误提醒WinToast启动失败");
main_logger->error("风控提醒WinToast启动失败");
}
});
// 出错次数达到6次
QObject::connect(&queryCenter, &QueryCenter::sayGoodbye, [&]() {
main_logger->flush();
exit(1);
});

queryCenter.startQuery();

Expand Down
Loading

0 comments on commit ba88e98

Please sign in to comment.