letsshoot.js – ein kleiner Discord Autorole Bot

Ich habe einen kleinen Discord Bot geschrieben, der User, die online, aber OHNE ROLLE sind, nach einer gewissen Zeit eine bestimmte Rolle gibt.

I developed a tiny discord bot that give online users without a role a specific role after a specific time.

Vielleicht ist der Code ja mal für jemanden nützlich.

Maybe this code may be usefull for someone.

Download Source!

/**
 * letsshoot.js - ein kleiner Discord Bot, der User, die online sind,
 * aber keine Rolle haben, nach einer gewissen Zeit in eine bestimmte Rolle packt.
 * Fragen: ms@letsshootshow.de
 *
 * Mini Howto:
 * yum install nodejs
 * npm install discord.js --save
 * node letsshoot.js
 * (kann auch unter Linux in einem screen gestartet werden, damit man den Bot permanent laufen lassen kann)
 *
 * Der Bot läuft auf meinem Discord:
 * https://discord.gg/sm9HGM2
 */
const Discord = require('discord.js');
const client = new Discord.Client();
const token = ''; // Hier das Bot-Token einsetzen
const autoroleName = 'Aktiv'; // Name der Rolle z.B. "Aktiv"
const interval = 60000 * 5; // in milliskunden (60000 * 5 = 5 Minuten)
const infochannel = 'news'; // Information über Rollenzuweiseung in diesem Channel posten

client.on('ready', () => {
	console.log('Bot ready!');
	var Roles = client.guilds.array()[0].roles;
	var AutoAddRole = Roles.find('name',autoroleName);
	client.channels.find('name', infochannel).send('Ich bin wieder online. :-)');

	// Set autorole to online users that have no role (register them permanently)
	setInterval(function(){
		var i;
		for( i in client.users.array() ){
			var User = client.users.array()[i];
			var has_role = false;
			// Search users without roles
			if( User.bot == false ) {
				var r;
				for(r in Roles.array() ) {
					var Role = Roles.array()[r];
					if(Role.name != '@everyone') {
						var Rolecheck = Role.members.find('id', User.id);
						if(Rolecheck !== null) {
							has_role = true;
							break;
						}
					}
				}
				if(!has_role && User.presence.status == 'online') {
					// Get member
					var Member = client.guilds.array()[0].members.find('id', User.id);
					Member.addRole(AutoAddRole.id);
					client.channels.find('name', infochannel).send(User.username + ' ist nun seit einiger Zeit online, hat aber keine Rolle. Ich verpasse ihm mal die Rolle "' + autoroleName + '".');
					console.log('User ' + User.username + ' ist online und hat keine Rolle! Fuege die Autorolle hinzu!');
				}
			}
		}
	}, interval);
});

// Bot reagiert auf "ping" - damit man mal schnell testen kann, ob er noch läuft
client.on('message', message => {
	// If the message is "ping"
	if (message.content === 'ping')
	{
		// Send "pong" to the same channel
		message.channel.send('pong');
	}
});

// Bot am Server einloggen
client.login(token);

Kommentar verfassen