Code Monkey home page Code Monkey logo

Comments (6)

ofbwyx avatar ofbwyx commented on September 27, 2024 1

感谢对 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");
			}

			});
	}

from miraicp.

Nambers avatar Nambers commented on September 27, 2024

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

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

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

from miraicp.

Antares0982 avatar Antares0982 commented on September 27, 2024

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

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

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

from miraicp.

Nambers avatar Nambers commented on September 27, 2024

v2.15.0 的下一个版本修复

from miraicp.

Antares0982 avatar Antares0982 commented on September 27, 2024

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

from miraicp.

Nambers avatar Nambers commented on September 27, 2024

fixed in v2.16.0 (will release soon)

from miraicp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.