es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quiero escribir algún texto en un archivo .txt utilizando un comando de bot (bot de Telegram).

En primer lugar, creo un bot de Telegram usando Python 3.10 con el módulo telegram.ext.
Hago que un comando específico solo pueda ser ejecutado con un rol específico. Por lo tanto, creo un archivo de texto para cada rol. De esta forma, el comando “/add_user”, por ejemplo, solo puede ser ejecutado con el rol “admin” del archivo admin.txt.

Mi problema es que no sé cómo agregar usuarios desde Telegram.
Quiero crear un comando como:

/adduser george as admin <- este comando escribirá george en admin.txt /adduser johnson as user <- este comando escribirá johnson en user.txt

Por favor, ayúdame.

Esta es parte de mi código:

from telegram.ext import *
import os

API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

def start_command(update, context):
    update.message.reply_text('¡Hola! Soy un bot muy útil. ¿Qué pasa?')

def abs_command(update, context):
    update.message.reply_text('El comando ABS se ha iniciado...')
    os.system('python abs.py')
    update.message.reply_text('El comando ABS ha finalizado.')    

def add_user_command(update, context):
    # No sé cómo hacer el comando aquí

# Ejecutar el programa
if __name__ == '__main__':
    updater = Updater(API_KEY, use_context=True)
    dp = updater.dispatcher

    # Lista de usuarios
    user = open('./userlist/user.txt', 'r').read()
    admin = open('./userlist/admin.txt', 'r').read()

    dp.add_handler(CommandHandler('start', start_command, Filters.user(username=user)))
    dp.add_handler(CommandHandler('start', start_command, Filters.user(username=admin)))    
    dp.add_handler(CommandHandler('abs', abs_command, Filters.user(username=absensak)))
    dp.add_handler(CommandHandler('add_user', add_user_command, Filters.user(username=admin)))

    # Ejecutar el bot
    updater.start_polling(1.0)
    updater.idle()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para añadir un usuario desde Telegram utilizando su código actual, puede modificar la función add_user_command de la siguiente manera:

    def add_user_command(update, context):
        message = update.message.text.split()  # dividir el comando en palabras
        if len(message) == 5 and message[3] == 'as':  # verificar si el comando tiene el formato correcto
            usuario = message[1]
            rol = message[2].lower()
            if rol == 'admin':
                with open('./userlist/admin.txt', 'a') as file:
                    file.write(usuario + '\n')  # añadir el nombre de usuario al archivo admin.txt
                update.message.reply_text(f'{usuario} ha sido añadido como administrador.')
            elif rol == 'user':
                with open('./userlist/user.txt', 'a') as file:
                    file.write(usuario + '\n')  # añadir el nombre de usuario al archivo user.txt
                update.message.reply_text(f'{usuario} ha sido añadido como usuario.')
            else:
                update.message.reply_text(f'Rol inválido: {rol}. Use "admin" o "user".')
        else:
            update.message.reply_text('Formato de comando inválido. Use: /add_user [usuario] [rol] as [admin/user].')
    

    Esta función primero divide el comando en palabras (message = update.message.text.split()). Luego verifica si el comando tiene el formato correcto (if len(message) == 5 and message[3] == 'as':), que es /add_user [usuario] [rol] as [admin/user].

    Si el comando es correcto, la función extrae el usuario y el rol del comando (usuario = message[1] y rol = message[2].lower()). Luego verifica si el rol es “admin” o “user” y añade el usuario al archivo de texto correspondiente (with open('./userlist/[rol].txt', 'a') as file: file.write(usuario + '\n')).

    Finalmente, la función envía una respuesta al usuario indicando si el nombre de usuario ha sido añadido como administrador, como usuario o si el rol es inválido (update.message.reply_text(f'{usuario} ha sido añadido como administrador/usuario.') o update.message.reply_text(f'Rol inválido: {rol}. Use "admin" o "user".')).

    Puede añadir esta función add_user_command modificada a su código existente y probarla enviando el comando /add_user con un nombre de usuario y rol válidos desde un chat de Telegram donde el bot esté instalado y tenga los privilegios apropiados.

Comments are closed.