Created
September 27, 2020 02:16
-
-
Save codewithtyler/d2c0554d3ea6fb5fa89ea0ae75ad4886 to your computer and use it in GitHub Desktop.
Discord.js Presence Update event - Giving role for when user is live on Twitch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
client.on( 'presenceUpdate', ( oldPresence, newPresence ) => { | |
if ( ( helper.isEmpty( newPresence ) || helper.isEmpty( newPresence.activities ) ) && !helper.isEmpty( oldPresence ) ) { | |
if ( oldPresence.member.roles.cache.some( role => role.name === helper.default_streaming_role ) ) { | |
const roleToRemove = oldPresence.guild.roles.find( role => role.name === helper.default_streaming_role ); | |
oldPresence.member.roles.remove( roleToRemove ); | |
logger.log( 'debug', `Removed ${roleToRemove.name} from ${oldPresence.user.tag} in ${oldPresence.guild.name} by oldPresence` ); | |
// TODO: Convert these to embed logs for the guild | |
// logger.log( 'debug', `${userToUpdate.tag} has stopped streaming` ); | |
} | |
} | |
else if ( !helper.isEmpty( newPresence ) ) { | |
if ( newPresence.user.bot ) { | |
logger.log( 'debug', 'User is a bot' ); | |
return; | |
} | |
// TODO: Add feature flag for the activity.name to support subs getting role and also being able to support streamers on other platforms i.e. YouTube | |
const newActivity = newPresence.activities.find( activity => activity.type === 'STREAMING' && activity.name === 'Twitch' ); | |
if ( !newActivity ) { | |
// The presence isn't null but they aren't streaming anymore | |
if ( newPresence.member.roles.cache.some( role => role.name === helper.default_streaming_role ) ) { | |
const roleToRemove = newPresence.guild.roles.cache.find( role => role.name === helper.default_streaming_role ); | |
newPresence.member.roles.remove( roleToRemove ); | |
logger.log( 'debug', `Removed ${roleToRemove.name} from ${newPresence.user.tag} in ${newPresence.guild.name} by newPresence` ); | |
// TODO: Convert these to embed logs for the guild | |
// logger.log( 'debug', `${newPresence.user.tag} has stopped streaming` ); | |
} | |
return; | |
} | |
else { | |
// TODO: Convert these to embed logs for the guild | |
// logger.log( 'debug', `${newPresence.user.username} is live!` ); // e.g. hydrabolt#0001 | |
const roleToAdd = newPresence.guild.roles.cache.find( role => role.name === helper.default_streaming_role ); | |
newPresence.member.roles.add( roleToAdd ); | |
logger.log( 'debug', `Added ${roleToAdd.name} to ${newPresence.user.tag} in ${newPresence.guild.name}` ); | |
} | |
} | |
else { | |
logger.log( 'debug', 'Both oldPresence and newPresence are null, why are we here?' ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ty