3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-16 14:11:50 +00:00
zeppelin/src/data/GuildSlowmodes.ts
Dragory d54897acdd Split BaseRepository into non-guild and guild
BaseRepository includes all the non-guild-specific functionality,
such as with() and getRelations().
BaseGuildRepository includes guild-specific functionality, such as
getInstance().
2019-05-25 21:25:34 +03:00

121 lines
3.2 KiB
TypeScript

import { BaseGuildRepository } from "./BaseGuildRepository";
import { getRepository, Repository } from "typeorm";
import { SlowmodeChannel } from "./entities/SlowmodeChannel";
import { SlowmodeUser } from "./entities/SlowmodeUser";
import moment from "moment-timezone";
export class GuildSlowmodes extends BaseGuildRepository {
private slowmodeChannels: Repository<SlowmodeChannel>;
private slowmodeUsers: Repository<SlowmodeUser>;
constructor(guildId) {
super(guildId);
this.slowmodeChannels = getRepository(SlowmodeChannel);
this.slowmodeUsers = getRepository(SlowmodeUser);
}
async getChannelSlowmode(channelId): Promise<SlowmodeChannel> {
return this.slowmodeChannels.findOne({
where: {
guild_id: this.guildId,
channel_id: channelId,
},
});
}
async setChannelSlowmode(channelId, seconds): Promise<void> {
const existingSlowmode = await this.getChannelSlowmode(channelId);
if (existingSlowmode) {
await this.slowmodeChannels.update(
{
guild_id: this.guildId,
channel_id: channelId,
},
{
slowmode_seconds: seconds,
},
);
} else {
await this.slowmodeChannels.insert({
guild_id: this.guildId,
channel_id: channelId,
slowmode_seconds: seconds,
});
}
}
async deleteChannelSlowmode(channelId): Promise<void> {
await this.slowmodeChannels.delete({
guild_id: this.guildId,
channel_id: channelId,
});
}
async getChannelSlowmodeUser(channelId, userId): Promise<SlowmodeUser> {
return this.slowmodeUsers.findOne({
guild_id: this.guildId,
channel_id: channelId,
user_id: userId,
});
}
async userHasSlowmode(channelId, userId): Promise<boolean> {
return (await this.getChannelSlowmodeUser(channelId, userId)) != null;
}
async addSlowmodeUser(channelId, userId): Promise<void> {
const slowmode = await this.getChannelSlowmode(channelId);
if (!slowmode) return;
const expiresAt = moment()
.add(slowmode.slowmode_seconds, "seconds")
.format("YYYY-MM-DD HH:mm:ss");
if (await this.userHasSlowmode(channelId, userId)) {
// Update existing
await this.slowmodeUsers.update(
{
guild_id: this.guildId,
channel_id: channelId,
user_id: userId,
},
{
expires_at: expiresAt,
},
);
} else {
// Add new
await this.slowmodeUsers.insert({
guild_id: this.guildId,
channel_id: channelId,
user_id: userId,
expires_at: expiresAt,
});
}
}
async clearSlowmodeUser(channelId, userId): Promise<void> {
await this.slowmodeUsers.delete({
guild_id: this.guildId,
channel_id: channelId,
user_id: userId,
});
}
async getChannelSlowmodeUsers(channelId): Promise<SlowmodeUser[]> {
return this.slowmodeUsers.find({
where: {
guild_id: this.guildId,
channel_id: channelId,
},
});
}
async getExpiredSlowmodeUsers(): Promise<SlowmodeUser[]> {
return this.slowmodeUsers
.createQueryBuilder()
.where("guild_id = :guildId", { guildId: this.guildId })
.andWhere("expires_at <= NOW()")
.getMany();
}
}