3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-10 20:35:02 +00:00

tags: delete command/response msg if the other is deleted

This commit is contained in:
Dragory 2019-01-06 14:39:16 +02:00
parent 145f5866cf
commit 50c6233190
6 changed files with 208 additions and 13 deletions

View file

@ -146,6 +146,7 @@ export class GuildSavedMessages extends BaseRepository {
const inserted = await this.messages.findOne(data.id);
this.events.emit("create", [inserted]);
this.events.emit(`create:${data.id}`, [inserted]);
}
async createFromMsg(msg: Message, overrides = {}) {
@ -180,6 +181,7 @@ export class GuildSavedMessages extends BaseRepository {
if (deleted) {
this.events.emit("delete", [deleted]);
this.events.emit(`delete:${id}`, [deleted]);
}
}
@ -227,6 +229,7 @@ export class GuildSavedMessages extends BaseRepository {
);
this.events.emit("update", [newMessage, oldMessage]);
this.events.emit(`update:${id}`, [newMessage, oldMessage]);
}
async saveEditFromMsg(msg: Message) {
@ -247,4 +250,31 @@ export class GuildSavedMessages extends BaseRepository {
this.toBePermanent.add(id);
}
}
async onceMessageAvailable(id: string, handler: (msg: SavedMessage) => any, timeout: number = 60 * 1000) {
let called = false;
let onceEventListener;
let timeoutFn;
const callHandler = async (msg: SavedMessage) => {
this.events.off(`create:${id}`, onceEventListener);
clearTimeout(timeoutFn);
if (called) return;
called = true;
await handler(msg);
};
onceEventListener = this.events.once(`create:${id}`, callHandler);
timeoutFn = setTimeout(() => {
called = true;
callHandler(null);
}, timeout);
const messageInDB = await this.find(id);
if (messageInDB) {
callHandler(messageInDB);
}
}
}

View file

@ -1,13 +1,16 @@
import { Tag } from "./entities/Tag";
import { getRepository, Repository } from "typeorm";
import { BaseRepository } from "./BaseRepository";
import { TagResponse } from "./entities/TagResponse";
export class GuildTags extends BaseRepository {
private tags: Repository<Tag>;
private tagResponses: Repository<TagResponse>;
constructor(guildId) {
super(guildId);
this.tags = getRepository(Tag);
this.tagResponses = getRepository(TagResponse);
}
async all(): Promise<Tag[]> {
@ -57,4 +60,30 @@ export class GuildTags extends BaseRepository {
tag
});
}
async findResponseByCommandMessageId(messageId: string): Promise<TagResponse> {
return this.tagResponses.findOne({
where: {
guild_id: this.guildId,
command_message_id: messageId
}
});
}
async findResponseByResponseMessageId(messageId: string): Promise<TagResponse> {
return this.tagResponses.findOne({
where: {
guild_id: this.guildId,
response_message_id: messageId
}
});
}
async addResponse(cmdMessageId, responseMessageId) {
await this.tagResponses.insert({
guild_id: this.guildId,
command_message_id: cmdMessageId,
response_message_id: responseMessageId
});
}
}

View file

@ -0,0 +1,14 @@
import { Entity, Column, PrimaryColumn, CreateDateColumn } from "typeorm";
@Entity("tag_responses")
export class TagResponse {
@Column()
@PrimaryColumn()
id: string;
@Column() guild_id: string;
@Column() command_message_id: string;
@Column() response_message_id: string;
}