Comments (6)
感谢对 load 问题的提醒,但我似乎不会升级 2.15.0(不懂咋编译啥的
hi 插件中目前有俩内容,一个是有戳一戳时候发消息,另一个就跑命令。命令的内容只有在 log 输出 yee
这一个。戳一戳是能正常用的,而只有在两个插件同时启用并且触发命令时候会报错。(代码在下面)
神奇的是报错后不去点,继续发命令还是能正常执行,但另一个插件会崩掉。
忽略后是没法继续跑的,Process exited with -1073740791
。
今天测试发现点击重试跟没点的效果相同,但输入 pluginlist
之后 Process exited with -1073740791
附上写得很丑的代码:
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.
PS: load 传入的是 path 路径而不是 id
然后是在执行 yee 这个命令时报错的吗, 如果是贴一下他的代码
如果不是 (也就是说在跑这个命令里面的内容前就报错了) 那就不用贴 (可以通过在命令内容第一行加一个日志看看有没有执行到)
然后更新一下最新版本 v2.15.0-RC2 , 一些使用可能有变化, 详见:https://github.com/Nambers/MiraiCP/tree/dev/cpp/examples 示例
from miraicp.
理论上你点那个忽略 MiraiCP还能继续跑
麻烦日志详细一点,以及复现代码也贴上来看一下,比如如何注册定时器之类的,帮助我们更好地定位到问题
顺便 @Nambers 也提到的,load
传入的是dll文件路径,因为我们允许用户unload
之后重新编译,更新插件的id、路径,所以不会去做缓存已经卸载掉的id和文件系统上的路径信息这种不利于热更新的操作,如果不是需要完整地替换掉dll,不建议用reload
from miraicp.
v2.15.0 的下一个版本修复
from miraicp.
之后我们会尝试复现,以及打算重构Command系统,预计修复要等一段时间了
from miraicp.
fixed in v2.16.0 (will release soon)
from miraicp.
Related Issues (20)
- LibLoader 严重报错 HOT 1
- 将GroupMessageEvent中的PlainText对象传递给MessageChain::add后,在发送消息时报错 HOT 2
- BotLeaveEvent事件类型枚举定义错位
- 重构CPP到下一个大版本3.*, 同时这个2.*版本也会继续维护(修复一些提交的问题), 但是不会更新其他功能(会尽量不写太多API change, 但是为了优化使用, API change是必要的), 大概包含以下几点
- miraicode解析对at出错 HOT 2
- 重载插件后,先前的计时器会被保留 HOT 3
- version `GLIBC_2.33' not found HOT 2
- 想问应该如何恰当实现定时任务 HOT 2
- schedule 占用 cpu 过多 HOT 2
- 无法获取文件列表 HOT 1
- Compiler Warning (level 1) C4251
- BotOnline事件不触发 HOT 4
- 点歌点不了 HOT 1
- MemberJoinEvent触发报错groupid is required to construct member, plz contact MiraiCP HOT 1
- 对mirai 2.15.0的支持 HOT 1
- CI检测commit message跳过执行构建
- 对动画表情的发送似乎不正确 HOT 1
- 更新java -jar MiraiCP.jar -g生成的config
- MiraiCP无法正常退出
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from miraicp.