Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

注册指令导致的错误 #198

Closed
1 task done
ofbwyx opened this issue Aug 4, 2023 · 6 comments · Fixed by #202
Closed
1 task done

注册指令导致的错误 #198

ofbwyx opened this issue Aug 4, 2023 · 6 comments · Fixed by #202
Assignees
Labels
f: structure design 关于:结构设计 p: high 优先级:高 t: bug 类型:bug

Comments

@ofbwyx
Copy link

ofbwyx commented Aug 4, 2023

Code of Conduct

  • I conform

问题描述

在同时使用不止一个插件(我同时有两个插件)时,若注册了一个指令,在触发时会导致错误,并且使另一个(或许是其余所有插件)出现错误并无法使用,在点掉报错后程序停止运行。

我使用的插件 Hi 中注册了一个指令,效果是输出 log yee;插件 fr24 中没有注册指令但有定时器。

V$AF$A}O4$178 D`A6 QLX0

图中红框,禁用 fr24 后 hi 能正常使用命令,但黄框重新启用插件后导致了错误。

日志

No response

版本

2.14.0

组件

不属于上述项或我不知道属于哪一项

编译器

Microsoft Visual C++ (MSVC)

系统

Windows

架构

x86-64/amd64

@Nambers
Copy link
Owner

Nambers commented Aug 4, 2023

PS: load 传入的是 path 路径而不是 id

然后是在执行 yee 这个命令时报错的吗, 如果是贴一下他的代码
如果不是 (也就是说在跑这个命令里面的内容前就报错了) 那就不用贴 (可以通过在命令内容第一行加一个日志看看有没有执行到)

然后更新一下最新版本 v2.15.0-RC2 , 一些使用可能有变化, 详见:https://github.com/Nambers/MiraiCP/tree/dev/cpp/examples 示例

@Nambers Nambers added f: API 关于:公开API s: needResponse 状态:需要进一步信息 labels Aug 4, 2023
@Nambers Nambers self-assigned this Aug 4, 2023
@Antares0982
Copy link
Collaborator

理论上你点那个忽略 MiraiCP还能继续跑

麻烦日志详细一点,以及复现代码也贴上来看一下,比如如何注册定时器之类的,帮助我们更好地定位到问题

顺便 @Nambers 也提到的,load传入的是dll文件路径,因为我们允许用户unload之后重新编译,更新插件的id、路径,所以不会去做缓存已经卸载掉的id和文件系统上的路径信息这种不利于热更新的操作,如果不是需要完整地替换掉dll,不建议用reload

@Antares0982 Antares0982 self-assigned this Aug 4, 2023
@Nambers Nambers added t: bug 类型:bug p: high 优先级:高 and removed s: needResponse 状态:需要进一步信息 labels Aug 4, 2023
@Nambers
Copy link
Owner

Nambers commented Aug 4, 2023

v2.15.0 的下一个版本修复

@ofbwyx
Copy link
Author

ofbwyx commented Aug 5, 2023

感谢对 load 问题的提醒,但我似乎不会升级 2.15.0(不懂咋编译啥的

hi 插件中目前有俩内容,一个是有戳一戳时候发消息,另一个就跑命令。命令的内容只有在 log 输出 yee 这一个。戳一戳是能正常用的,而只有在两个插件同时启用并且触发命令时候会报错。(代码在下面)

神奇的是报错后不去点,继续发命令还是能正常执行,但另一个插件会崩掉。

image

忽略后是没法继续跑的,Process exited with -1073740791

image

今天测试发现点击重试跟没点的效果相同,但输入 pluginlist 之后 Process exited with -1073740791

image

image

附上写得很丑的代码:

Hi 插件

	class Test :public IRawCommand {
	public:
		IRawCommand::Config config() override { return { "Test",{"test"}}; }
		void onCommand(std::shared_ptr<Contact> c, const Bot& b, const MessageChain& a) override {
			//if (c.get()->toJson()["id"] == 80000000)return;
			//Group g(c.get()->toJson()["groupId"], c.get()->toJson()["botId"]);
			//g.sendMessage("咕");
			Logger::logger.warning("yee");
		}
		Test() = default;
	};
void onEnable() override {
		CommandManager::registerCommand<Command::Test>();
		Event::registerEvent<NudgeEvent>([](NudgeEvent e) {
			if (e.target.get()->id() == e.target.get()->botid() && time(0) >= NudgeCD) {
				for (int i = 0; i < set["NudgeG"].size(); i++)
					if ((i == 0 && set["NudgeG"][0] == -1) || set["NudgeG"][i] == e.subject.get()->id()) { // 找到开启了戳一戳的群
						Group g(e.subject.get()->id(), e.subject.get()->botid());
						int rd = myrand() % (set["NudgeR"].size()+1);
						if (rd == set["NudgeR"].size()) Member(e.from.get()->id(), e.subject.get()->id(), e.subject.get()->botid()).sendNudge(); // 戳回去
						else {
							MessageChain msg = msg.deserializationFromMiraiCode(set["NudgeR"][rd]);
							g.sendMessage(msg); // 发送消息
						}
						NudgeCD = time(0) + 10;
						break;
					}
			}
		});
}

Fr24 插件(其中 python 函数用于访问网页)

	void onEnable() override {

		schedule(1, "399642824"); // 注册 30 min 计时器

		Event::registerEvent<TimeOutEvent>([](TimeOutEvent e) {

			Logger::logger.info("Time Out!");
			schedule(1800, e.msg); // 下一轮计时

			json rsp = python("https://www.flightradar24.com/flights/most-tracked"); // Fr24 爬取
			Logger::logger.info(rsp);

			if ((!rsp["data"][0]["squawk"].is_null() && rsp["data"][0]["squawk"] != "7600") || (int)rsp["data"][0]["clicks"] >= 10000)
				for (int i = 0; i < set["Fr24G"].size(); i++) {
					if ((int)rsp["data"][0]["clicks"] >= 10000)Group(set["Fr24G"][i], atoll(e.msg.c_str())).sendMessage("有超过一万人正在关注的航班:\n" + rsp["data"][0].dump() + "\n数据来源:https://www.flightradar24.com");
					else Group(set["Fr24G"][i], atoll(e.msg.c_str())).sendMessage("可能出现异常的航班:\n" + rsp["data"][0].dump() + "\n数据来源:https://www.flightradar24.com");
				}
			});

		Event::registerEvent<GroupMessageEvent>([](GroupMessageEvent e) {	

			if (e.message.toMiraiCode() == (string)"Fr24"|| e.message.toMiraiCode() == (string)"fr24") {
				json rsp = python("https://www.flightradar24.com/flights/most-tracked"); // Fr24 爬取
				e.group.sendMessage("当前关注最多的航班:\n" + rsp["data"][0].dump() + "\n数据来源:https://www.flightradar24.com");
			}

			});
	}

@Antares0982
Copy link
Collaborator

之后我们会尝试复现,以及打算重构Command系统,预计修复要等一段时间了

@Antares0982 Antares0982 added f: structure design 关于:结构设计 and removed f: API 关于:公开API labels Aug 5, 2023
Nambers pushed a commit that referenced this issue Sep 15, 2023
@Antares0982 Antares0982 linked a pull request Oct 6, 2023 that will close this issue
@Antares0982 Antares0982 mentioned this issue Oct 6, 2023
@Nambers
Copy link
Owner

Nambers commented Oct 26, 2023

fixed in v2.16.0 (will release soon)

@Nambers Nambers closed this as completed Oct 26, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
f: structure design 关于:结构设计 p: high 优先级:高 t: bug 类型:bug
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants