Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
997 changes: 0 additions & 997 deletions locales/en.json

This file was deleted.

90 changes: 90 additions & 0 deletions modules/name-list-cleaner/configs/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"description": {
"en": "Configure the function of the module here",
"de": "Stelle hier die Funktionen des Modules ein"
},
"humanName": {
"en": "Configuration",
"de": "Konfiguration"
},
"filename": "config.json",
"content": [
{
"name": "keepNickname",
"humanName": {
"en": "Keep nickname",
"de": "Nickname behalten"
},
"default": {
"en": true
},
"description": {
"en": "When activated, special characters will be removed from nicknames. If left disabled, the nickname will be removed and the username will be shown instead.",
"de": "Wenn aktiviert, werden Sonderzeichen aus den Nicknamen entfernt. Wenn deaktiviert, wird der Nickname entfernt und stattdessen der Benutzername angezeigt."
},
"type": "boolean"
},
{
"name": "symbolWhitelist",
"humanName": {
"en": "Character Whitelist/Blacklist",
"de": "Zeichen Whitelist/Blacklist"
},
"default": {
"en": []
},
"description": {
"en": "A list of characters that should be allowed (whitelist) or blocked (blacklist) at the start of usernames. If the list is empty, all non-alphanumeric characters will be removed.",
"de": "Eine Liste von Zeichen, die am Anfang von Benutzernamen erlaubt (Whitelist) oder blockiert (Blacklist) werden sollen. Wenn die Liste leer ist, werden alle nicht-alphanumerischen Zeichen entfernt."
},
"type": "array",
"content": "string"
},
{
"name": "isBlacklist",
"humanName": {
"en": "Use blacklist instead of whitelist",
"de": "Blacklist statt Whitelist verwenden"
},
"default": {
"en": false
},
"description": {
"en": "When activated, the list of characters will be treated as a blacklist (characters in the list will be blocked). If left disabled, the list will be treated as a whitelist (only characters in the list and alphanumeric characters will be allowed).",
"de": "Wenn aktiviert, wird die Liste der Zeichen als Blacklist behandelt (Zeichen in der Liste werden blockiert). Wenn deaktiviert, wird die Liste als Whitelist behandelt (nur Zeichen in der Liste und alphanumerische Zeichen werden erlaubt)."
},
"type": "boolean"
},
{
"name": "userWhitelist",
"humanName": {
"en": "User Whitelist",
"de": "Benutzer-Whitelist"
},
"default": {
"en": []
},
"description": {
"en": "A list of user IDs that should be exempt from the username check. Usernames of these users will not be modified.",
"de": "Eine Liste von Benutzer-IDs, die von der Benutzernamenprüfung ausgenommen werden sollen. Die Benutzernamen dieser Benutzer werden nicht geändert."
},
"type": "array",
"content": "userID"
},
{
"name": "alsoCheckUsernames",
"humanName": {
"en": "Also check usernames",
"de": "Auch Benutzernamen überprüfen"
},
"default": {
"en": false
},
"description": {
"en": "When activated, not only nicknames but also usernames will be checked for special characters and modified accordingly. If left disabled, only nicknames will be checked and modified, usernames will be left unchanged.",
"de": "Wenn aktiviert, werden nicht nur Nicknamen, sondern auch Benutzernamen auf Sonderzeichen überprüft und entsprechend geändert. Wenn deaktiviert, werden nur Nicknamen überprüft und geändert, Benutzernamen bleiben unverändert."
},
"type": "boolean"
}
]
}
7 changes: 7 additions & 0 deletions modules/name-list-cleaner/events/botReady.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const {renameMember} = require('../renameMember');

module.exports.run = async function (client) {
for (const member of client.guild.members.cache.values()) {
await renameMember(client, member);
}
}
9 changes: 9 additions & 0 deletions modules/name-list-cleaner/events/guildMemberUpdate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const {renameMember} = require("../renameMember");
module.exports.run = async function (client, oldGuildMember, newGuildMember) {

if (!client.botReadyAt) return;
if (newGuildMember.guild.id !== client.guild.id) return;
if (oldGuildMember.nickname === newGuildMember.nickname && oldGuildMember.user.username === newGuildMember.user.username) return;
await renameMember(client, newGuildMember);
}

24 changes: 24 additions & 0 deletions modules/name-list-cleaner/module.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"name": "name-list-cleaner",
"humanReadableName": {
"en": "Name List Cleaner",
"de": "Namenslisten Cleaner"
},
"author": {
"name": "hfgd",
"link": "https://github.com/hfgd123",
"scnxOrgID": "2"
},
"openSourceURL": "https://github.com/hfgd123/CustomDCBot/tree/main/modules/name-list-cleaner",
"config-example-files": [
"configs/config.json"
],
"events-dir": "/events",
"tags": [
"tools"
],
"description": {
"en": "Remove special characters from the beginning of usernames",
"de": "Entferne Sonderzeichen vom Anfang von Benutzernamen"
}
}
70 changes: 70 additions & 0 deletions modules/name-list-cleaner/renameMember.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
const {localize} = require("../../src/functions/localize");
renameMember = async function (client, guildMember) {
const moduleConf = client.configurations['name-list-cleaner']['config'];
if (moduleConf.userWhitelist.includes(guildMember.user.id)) return;
let hasNickname = guildMember.nickname !== null;


if (hasNickname) {
let newName = checkUsername(client, guildMember.nickname, false);
if (newName === guildMember.nickname) return;
} else if (moduleConf.alsoCheckUsernames) {
let newName = checkUsername(client, guildMember.user.username, true);
if (newName === guildMember.user.username) return;
} else {
return;
}

if (guildMember.guild.ownerId === guildMember.id) {
client.logger.error('[name-list-cleaner] ' + localize('name-list-cleaner', 'owner-cannot-be-renamed', {u: guildMember.user.username}))
return;
}

if (moduleConf.keepNickname) {
try {
await guildMember.setNickname(newName, localize('name-list-cleaner', 'nickname-changed', {u: guildMember.user.username}));
} catch (e) {
client.logger.error('[name-list-cleaner] ' + localize('name-list-cleaner', 'nickname-error', {u: guildMember.user.username, e: e}))
}
} else {
if (!hasNickname) {
return;
}
try {
await guildMember.setNickname(null, localize('name-list-cleaner', 'nickname-reset', {u: guildMember.user.username}));
} catch (e) {
client.logger.error('[name-list-cleaner] ' + localize('name-list-cleaner', 'nickname-error', {u: guildMember.user.username, e: e}))
}
}
}

module.exports.renameMember = renameMember;

function checkUsername(client, name, isUsername) {
const moduleConf = client.configurations['name-list-cleaner']['config'];
const regEx = /^[a-zA-Z0-9]$/;
if (name.length === 0) {
if (isUsername) {
return 'User'
} else {
return null;
}
}
if (moduleConf.symbolWhitelist.length === 0) {
if (name.charAt(0).match(regEx)) {
return name;
} else {
return checkUsername(client, name.substring(1), isUsername);
}
} else if (!moduleConf.symbolWhitelist.includes(name.charAt(0)) && !moduleConf.isBlacklist) {
if (name.charAt(0).match(regEx)) {
return name;
} else {
return checkUsername(client, name.substring(1), isUsername);
}
} else if (moduleConf.symbolWhitelist.includes(name.charAt(0)) && moduleConf.isBlacklist) {
return checkUsername(client, name.substring(1), isUsername);
} else {
return name;
}
}