Skip to content

Instantly share code, notes, and snippets.

@codewithtyler
Created September 27, 2020 02:16
Show Gist options
  • Save codewithtyler/d2c0554d3ea6fb5fa89ea0ae75ad4886 to your computer and use it in GitHub Desktop.
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
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?' );
}
}
@z3db0y
Copy link

z3db0y commented Apr 30, 2023

ty

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment