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:
parent
145f5866cf
commit
50c6233190
6 changed files with 208 additions and 13 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
14
src/data/entities/TagResponse.ts
Normal file
14
src/data/entities/TagResponse.ts
Normal 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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue