accept user fluxer implementation

This commit is contained in:
mo
2026-03-08 22:45:56 +01:00
parent dd7553f294
commit 5271665963
8 changed files with 156 additions and 169 deletions

View File

@@ -1,69 +1,100 @@
import { DmService } from "actions/dm/dm.service";
import config from "config";
import type { CacheType, ChatInputCommandInteraction, Guild, GuildMember, MessageReaction, PartialMessageReaction, PartialUser, User } from "discord.js";
import type {
CacheType,
ChatInputCommandInteraction,
Guild,
GuildMember,
MessageReaction,
PartialMessageReaction,
PartialUser,
User,
} from "discord.js";
export class ReactRolesService {
dmService: DmService;
dmService: DmService;
constructor() {
this.dmService = new DmService();
}
constructor() {
this.dmService = new DmService();
}
async roleMention(reaction: MessageReaction | PartialMessageReaction, user: User | PartialUser, add: boolean) {
if (!await this.validMsg(reaction.message.id)) return;
try {
await reaction.fetch();
const guild = reaction.message.guild;
if (!guild) return;
const member = await this.getUser(guild, user);
if (!member) return;
add ? await this.giveRoleMention(member, guild, user) : await this.removeRoleMention(member, guild, user);
await this.dmService.roleMentionDm(member, add);
} catch (error) {
console.error('smt went wring while roleMention():', error);
return;
}
}
async roleMention(
reaction: MessageReaction | PartialMessageReaction,
user: User | PartialUser,
add: boolean,
) {
if (!(await this.validMsg(reaction.message.id))) return;
try {
await reaction.fetch();
const guild = reaction.message.guild;
if (!guild) return;
const member = await this.getUser(guild, user);
if (!member) return;
add
? await this.giveRoleMention(member, guild, user)
: await this.removeRoleMention(member, guild, user);
await this.dmService.roleMentionDm(member, add);
} catch (error) {
console.error("smt went wring while roleMention():", error);
return;
}
}
async giveRoleMention(
member: GuildMember,
guild: Guild,
user: User | PartialUser,
) {
this.updateRoleMention(member, guild, user, true);
}
async removeRoleMention(
member: GuildMember,
guild: Guild,
user: User | PartialUser,
) {
this.updateRoleMention(member, guild, user, false);
}
async giveRoleMention(member: GuildMember, guild: Guild, user: User | PartialUser) {
this.updateRoleMention(member, guild, user, true);
}
async removeRoleMention(member: GuildMember, guild: Guild, user: User | PartialUser) {
this.updateRoleMention(member, guild, user, false);
}
async updateRoleMention(
member: GuildMember,
guild: Guild,
user: User | PartialUser,
add: boolean,
) {
try {
const role = guild.roles.cache.get(config.discord.roleMention);
if (!role) {
console.error("role ot found.");
return;
}
async updateRoleMention(member: GuildMember, guild: Guild, user: User | PartialUser, add: boolean) {
try {
if (add === member.roles.cache.has(role.id)) {
console.log(`${member.user.tag} hat die Rolle *streber* bereits.`);
return;
}
const role = guild.roles.cache.get(config.discord.roleMention);
if (!role) {
console.error("role ot found.");
return;
}
await (add ? member.roles.add(role) : member.roles.remove(role));
console.log(
`role *streber* successfully ${add ? "added to" : "removed from"} ${member.user.tag}.`,
);
} catch (error) {
console.error(
`error while ${add ? "added to" : "removed from"} RoleMention:`,
error,
);
}
}
if (add === member.roles.cache.has(role.id)) {
console.log(`${member.user.tag} hat die Rolle *streber* bereits.`);
return;
}
async validMsg(id: string) {
return id === config.discord.rolesMsg;
}
await (add ? member.roles.add(role) : member.roles.remove(role));
console.log(`role *streber* successfully ${add ? "added to" : "removed from"} ${member.user.tag}.`);
} catch (error) {
console.error(`error while ${add ? "added to" : "removed from"} RoleMention:`, error);
}
}
async validMsg(id: string) {
return id === config.discord.rolesMsg;
}
async getUser(guild: Guild, user: User | PartialUser) {
try {
return await guild.members.fetch(user.id);
} catch (error) {
console.error("error fetching user:", error);
return null;
}
}
}
async getUser(guild: Guild, user: User | PartialUser) {
try {
return await guild.members.fetch(user.id);
} catch (error) {
console.error("error fetching user:", error);
return null;
}
}
}