Reputation: 89
Could someone help me to get that script working? I guess it's not updated to the newest Discord API.
I just need three things: A logger with nickname change, username change and avatar change.
Already made myself working logger with a role change and a welcome message when someone new just gets in but these three seems to be broken as hell.
bot.on('guildMemberUpdate', function(guild, oldMember, newMember) {
//declare changes
var Changes = {
unknown: 0,
addedRole: 1,
removedRole: 2,
username: 3,
nickname: 4,
avatar: 5
};
var change = Changes.unknown;
//check if username changed
if (newMember.user.username != oldMember.user.username)
change = Changes.username;
//check if nickname changed
if (newMember.nickname != oldMember.nickname)
change = Changes.nickname;
//check if avatar changed
if (newMember.user.avatarURL != oldMember.user.avatarURL)
change = Changes.avatar;
//log to console
switch (change) {
case Changes.unknown:
console.log('[' + guild.name + '][UPDUSR] ' + newMember.user.username + '#' + newMember.user.discriminator);
break;
case Changes.username:
console.log('[' + guild.name + '][UPDUSRNM] ' + oldMember.user.username + '#' + oldMember.user.discriminator +
' is now ' + newMember.user.username + '#' + newMember.user.discriminator);
break;
case Changes.nickname:
console.log('[' + guild.name + '][UPDUSRNK] ' + newMember.user.username + '#' + newMember.user.discriminator +
(oldMember.nickname != null ? ' (' + oldMember.nickname + ')' : '') +
(newMember.nickname != null ? ' is now ' + newMember.nickname : ' no longer has a nickname.'));
break;
case Changes.avatar:
console.log('[' + guild.name + '][UPDAVT] ' + newMember.user.username + '#' + newMember.user.discriminator);
break;
}
//post in the guild's log channel
var log = guild.channels.find('name', CHANNEL);
if (log != null) {
switch (change) {
case Changes.unknown:
log.sendMessage('**[User Update]** ' + newMember);
break;
case Changes.username:
log.sendMessage('**[User Username Changed]** ' + newMember + ': Username changed from ' +
oldMember.user.username + '#' + oldMember.user.discriminator + ' to ' +
newMember.user.username + '#' + newMember.user.discriminator);
break;
case Changes.nickname:
log.sendMessage('**[User Nickname Changed]** ' + newMember + ': ' +
(oldMember.nickname != null ? 'Changed nickname from ' + oldMember.nickname +
+newMember.nickname : 'Set nickname') + ' to ' +
(newMember.nickname != null ? newMember.nickname + '.' : 'original username.'));
break;
case Changes.avatar:
log.sendMessage('**[User Avatar Changed]** ' + newMember);
break;
}
}
});
Upvotes: 0
Views: 704
Reputation: 2909
There are a few issues:
guildMemberUpdate
event only passes two parameters: oldMember and newMember. It does not pass a guild parameter as shown in your code.guild
with newMember.guild
.guild.channels
now requires .cache
to be appended on the end: guild.channels.cache
. For more information, read the Discord.js migration guide.Discord.Collection()
.find()
method now only accepts a function..sendMessage()
needs to be replaced with .send()
..avatarURL
needs to be replaced with .displayAvatarURL()
.Side Note: why don't you use newMember.user.tag
instead of newMember.user.username + '#' + newMember.user.discriminator
?
Here is the modified code:
bot.on('guildMemberUpdate', function(oldMember, newMember) {
//declare changes
var Changes = {
unknown: 0,
addedRole: 1,
removedRole: 2,
username: 3,
nickname: 4,
avatar: 5
};
var change = Changes.unknown;
//check if username changed
if (newMember.user.username !== oldMember.user.username)
change = Changes.username;
//check if nickname changed
if (newMember.nickname !== oldMember.nickname)
change = Changes.nickname;
//check if avatar changed
if (newMember.user.displayAvatarURL() !== oldMember.user.displayAvatarURL())
change = Changes.avatar;
//log to console
switch (change) {
case Changes.unknown:
console.log('[' + newMember.guild.name + '][UPDUSR] ' + newMember.user.username + '#' + newMember.user.discriminator);
break;
case Changes.username:
console.log('[' + newMember.guild.name + '][UPDUSRNM] ' + oldMember.user.username + '#' + oldMember.user.discriminator +
' is now ' + newMember.user.username + '#' + newMember.user.discriminator);
break;
case Changes.nickname:
console.log('[' + newMember.guild.name + '][UPDUSRNK] ' + newMember.user.username + '#' + newMember.user.discriminator +
(oldMember.nickname != null ? ' (' + oldMember.nickname + ')' : '') +
(newMember.nickname != null ? ' is now ' + newMember.nickname : ' no longer has a nickname.'));
break;
case Changes.avatar:
console.log('[' + newMember.guild.name + '][UPDAVT] ' + newMember.user.username + '#' + newMember.user.discriminator);
break;
}
//post in the guild's log channel
var log = newMember.guild.channels.cache.find(channel => channel.name === CHANNEL);
if (log) {
switch (change) {
case Changes.unknown:
log.send('**[User Update]** ' + newMember);
break;
case Changes.username:
log.send('**[User Username Changed]** ' + newMember + ': Username changed from ' +
oldMember.user.username + '#' + oldMember.user.discriminator + ' to ' +
newMember.user.username + '#' + newMember.user.discriminator);
break;
case Changes.nickname:
log.send('**[User Nickname Changed]** ' + newMember + ': ' +
(oldMember.nickname != null ? 'Changed nickname from ' + oldMember.nickname +
+newMember.nickname : 'Set nickname') + ' to ' +
(newMember.nickname != null ? newMember.nickname + '.' : 'original username.'));
break;
case Changes.avatar:
log.send('**[User Avatar Changed]** ' + newMember);
break;
}
}
});
Upvotes: 0
Reputation: 786
The following line is causing your program to error:
var log = guild.channels.find('name', CHANNEL);
In discord.js v12, you need to use a function and use the .cache.
Here is the corrected ver:
var log = guild.channels.cache.find(c => c.name == CHANNEL);
Upvotes: 2