Crear comando mod | unmod
Anteriormente, trabajamos añadiendo a la guía de creacion de bots de Telegram, el comando para anclar y desanclar mensajes. En él, trabajamos con la condición del uso estricto del comando, para que solo creadores y administradores pudiesen usarlo y que filtrase mediante el tipo de chat donde se haga uso del comando.
En esta ocasión, crearemos el comando que permite añadir y eliminar administradores con tan solo escribir un comando y sin tener que acceder a los ajustes del grupo haciendo uso de la condición del uso estricto. Previamente, debemos editar los permisos a nuestro bot para que permita añadir otros administradores.
Para crear este comando, utilizaremos un único método y distintas propiedades. Éste método se encargará de ascender y degradar los privilegios de un miembro. Este método se llama:
Propiedades y valores booleanos del método son los siguientes:
- can_delete_message
- can_change_info
- can_invite_users
- can_pin_messages
- can_restrict_members
- can_promote_members
También, debemos ver las distintas propiedades que podremos otorgarle a los usuarios una vez se aplique el comando. Empezaremos declarando las variables pertinentes y continuaremos con las propiedades de la siguiente manera:
Comando /mod
bot.onText(/^\/mod/, function(msg){
// Fijamos las variables
var chatId = msg.chat.id;
var userId = msg.from.id;
var replyId = msg.reply_to_message.from.id;
var replyName = msg.reply_to_message.from.first_name;
var userName = msg.from.first_name;
var messageId = msg.message_id;
//
// Fijamos las propiedades con su respectivo valor
const prop = {};
prop.can_delete_message = true;
prop.can_change_info = false;
prop.can_invite_users = true;
prop.can_pin_messages = true;
prop.can_restrict_members = true;
prop.can_promote_members = false;
//
if (msg.reply_to_message == undefined){
return;
}
bot.getChatMember(chatId, userId).then(function(data){
if ((data.status == 'creator') || (data.status == 'administrator')){
bot.promoteChatMember(chatId, replyId, prop).then(function(result){
bot.deleteMessage(chatId, messageId);
bot.sendMessage(chatId, "Ahora " + replyName + ", es administrador.")
})
}
else {
bot.sendMessage(chatId, "Lo siento " + userName + ", no eres administrador" )
}
})
});
Dichas propiedades son booleanas, por lo tanto, solo podremos elegir dos valores, true
o false
. Hemos dejado algunas propiedades como change_info
y promote_members
en false por el riesgo que conlleva dejarlas en true.
El riesgo que conlleva dejar el valor de las propiedades citadas anteriormente en true, permitiría a la persona que nombremos como administrador con este comando poder cambiar la información, en este caso de un grupo y poder añadir a otros usuarios como administradores. Mi recomendación es que ambos valores se queden en false por seguridad.
Terminando de escribir éste trozo de código, obtendríamos como resultado algo similar a esto:
Comando /unmod
Teniendo el comando /mod funcionando a la perfección, pasaremos a crear el comando inverso. Éste nos permitirá retirar los privilegios a un administrador que haya sido nombrado previamente con el comando /mod, mientas que si el usuario ha sido nombrado administrador mediante los ajustes del grupo, este comando no será efectivo.
El código en si es muy parecido al anterior, únicamente tendremos que cambiar el valor de las propiedades del método a false
para que el usuario sobre el que se ejecuta este comando, obtenga los permisos de un usuario normal. Estructuraremos el código de la siguiente manera:
bot.onText(/^\/unmod/, function(msg) {
var chatId = msg.chat.id;
var replyName = msg.reply_to_message.from.first_name;
var replyId = msg.reply_to_message.from.id;
var userId = msg.from.id;
var fromName = msg.from.first_name;
var messageId = msg.message_id;
// Cambiamos a false todos los valores de las propiedades
const prop = {};
prop.can_change_info = false;
prop.can_delete_message = false;
prop.can_invite_users = false;
prop.can_pin_messages = false;
prop.can_restrict_members = false;
prop.can_promote_members = false;
//
if (msg.reply_to_message == undefined) {
return;
}
bot.getChatMember(chatId, userId).then(function(data) {
if ((data.status == 'creator') || (data.status == 'administrator')) {
bot.promoteChatMember(chatId, replyId, prop).then(function(result) {
bot.deleteMessage(chatId, messageId)
bot.sendMessage(chatId, "Ahora " + replyName + ", ya no es administrador.")
})
}
else {
bot.sendMessage(chatId, "Lo siento " + fromName + " no eres administrador.")
}
})
});
Como podeis ver, únicamente hemos cambiado el valor de las propiedades a false para que, como hemos dicho anteriormente, vuelva a tener el status de un usuario normal y corriente, obteniendo como resultado:
Y hasta aquí el comando de hoy. En el próximo tutorial, trabajaremos con los eventos de escucha para construir el mensaje de bienvenida en los grupos y hacer que cuando un usuario ingrese al grupo, el bot le dé la bienvenida.