|
@@ -14,6 +14,7 @@ const koishi_1 = require("koishi");
|
|
|
require("koishi-adapter-onebot");
|
|
|
const command_1 = require("./command");
|
|
|
const loggers_1 = require("./loggers");
|
|
|
+const utils_1 = require("./utils");
|
|
|
const logger = loggers_1.getLogger('qqbot');
|
|
|
const cqUrlFix = (factory) => (...args) => factory(...args).replace(/(?<=\[CQ:.*)url=(?=(base64|file|https?):\/\/)/, 'file=');
|
|
|
exports.Message = {
|
|
@@ -33,6 +34,7 @@ exports.Message = {
|
|
|
class default_1 {
|
|
|
constructor(opt) {
|
|
|
this.messageQueues = {};
|
|
|
+ this.tempSenders = {};
|
|
|
this.next = (type, id) => {
|
|
|
const queue = this.messageQueues[`${type}:${id}`];
|
|
|
if (queue && queue.length) {
|
|
@@ -60,6 +62,7 @@ class default_1 {
|
|
|
if (session.sender.groupId) {
|
|
|
const friendList = yield session.bot.getFriendList();
|
|
|
if (!friendList.some(friendItem => friendItem.userId === session.userId)) {
|
|
|
+ this.tempSenders[session.userId] = session.sender.groupId;
|
|
|
return {
|
|
|
chatID: {
|
|
|
qq: Number(session.userId),
|
|
@@ -119,15 +122,33 @@ class default_1 {
|
|
|
});
|
|
|
this.app.on('friend-request', (session) => __awaiter(this, void 0, void 0, function* () {
|
|
|
const userString = `${session.username}(${session.userId})`;
|
|
|
- const groupString = `${session.groupName}(${session.groupId})`;
|
|
|
+ let groupId;
|
|
|
+ let groupString;
|
|
|
+ if (session.username in this.tempSenders)
|
|
|
+ groupId = this.tempSenders[session.userId].toString();
|
|
|
logger.debug(`detected new friend request event: ${userString}`);
|
|
|
return session.bot.getGroupList().then(groupList => {
|
|
|
- if (groupList.some(groupItem => groupItem.groupId === session.groupId)) {
|
|
|
+ if (groupList.some(groupItem => {
|
|
|
+ const test = groupItem.groupId === groupId;
|
|
|
+ if (test)
|
|
|
+ groupString = `${groupItem.groupName}(${groupId})`;
|
|
|
+ return test;
|
|
|
+ })) {
|
|
|
session.bot.handleFriendRequest(session.messageId, true);
|
|
|
return logger.info(`accepted friend request from ${userString} (from group ${groupString})`);
|
|
|
}
|
|
|
- logger.warn(`received friend request from ${userString} (from group ${groupString})`);
|
|
|
- logger.warn('please manually accept this friend request');
|
|
|
+ utils_1.chainPromises(groupList.map(groupItem => (done) => Promise.resolve(done ||
|
|
|
+ this.bot.getGroupMember(groupItem.groupId, session.userId).then(() => {
|
|
|
+ groupString = `${groupItem.groupName}(${groupItem.groupId})`;
|
|
|
+ session.bot.handleFriendRequest(session.messageId, true);
|
|
|
+ logger.info(`accepted friend request from ${userString} (found in group ${groupString})`);
|
|
|
+ return true;
|
|
|
+ }).catch(() => false)))).then(done => {
|
|
|
+ if (done)
|
|
|
+ return;
|
|
|
+ logger.warn(`received friend request from ${userString} (stranger)`);
|
|
|
+ logger.warn('please manually accept this friend request');
|
|
|
+ });
|
|
|
});
|
|
|
}));
|
|
|
this.app.on('group-request', (session) => __awaiter(this, void 0, void 0, function* () {
|