81 lines
2 KiB
JavaScript
81 lines
2 KiB
JavaScript
|
const { EventEmitter } = require("events");
|
||
|
|
||
|
class WatchedGuild extends EventEmitter {
|
||
|
constructor() {
|
||
|
super();
|
||
|
|
||
|
this.knownWebhooks = new Map();
|
||
|
this.eventStack = [];
|
||
|
this.upstreamGuildId = null;
|
||
|
}
|
||
|
|
||
|
pushEvent(e) {
|
||
|
this.eventStack.push(e);
|
||
|
this.emit("pushed", e);
|
||
|
}
|
||
|
|
||
|
consumeEvent() {
|
||
|
return this.eventStack.pop();
|
||
|
}
|
||
|
|
||
|
consumeAll() {
|
||
|
const events = [...this.eventStack];
|
||
|
this.eventStack = [];
|
||
|
return events;
|
||
|
}
|
||
|
|
||
|
hasEvents() {
|
||
|
return this.eventStack.length > 0;
|
||
|
}
|
||
|
|
||
|
_pushMessageEvent(message) {
|
||
|
this.pushEvent({
|
||
|
eventType: "messageCreate",
|
||
|
message: message.toJSON()
|
||
|
});
|
||
|
}
|
||
|
|
||
|
discordConnect(bot) {
|
||
|
this.bot = bot;
|
||
|
this.bot.on("messageCreate", (message) => {
|
||
|
if (message.guildId !== this.upstreamGuildId)
|
||
|
return;
|
||
|
|
||
|
this._pushMessageEvent(message);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async discordSendMessage(messageContent, channelId, username, avatarURL=undefined) {
|
||
|
if (!this.bot)
|
||
|
throw new Error("Bot not connected");
|
||
|
|
||
|
let webhook = this.knownWebhooks.get(channelId);
|
||
|
if (!webhook) {
|
||
|
webhook = (await this.bot.getChannelWebhooks(channelId))
|
||
|
.filter(w => w.name == "well_known__bridge")[0];
|
||
|
|
||
|
if (!webhook)
|
||
|
webhook = await this.bot.createChannelWebhook(channelId, {
|
||
|
name: "well_known__bridge"
|
||
|
}, "This webhook was created by the bridge API bot.");
|
||
|
|
||
|
this.knownWebhooks.set(channelId, webhook);
|
||
|
}
|
||
|
|
||
|
await this.bot.executeWebhook(webhook.id, webhook.token, {
|
||
|
allowedMentions: {
|
||
|
everyone: false,
|
||
|
roles: false,
|
||
|
users: true
|
||
|
},
|
||
|
content: messageContent,
|
||
|
tts: false,
|
||
|
wait: true,
|
||
|
avatarURL,
|
||
|
username
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = WatchedGuild;
|