137 lines
4.8 KiB
Python
137 lines
4.8 KiB
Python
|
""" Implementación Bot Telegram API """
|
||
|
import configparser as cfg
|
||
|
import logging
|
||
|
#import os
|
||
|
import fetchip
|
||
|
import random
|
||
|
import telegram.ext
|
||
|
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
|
||
|
|
||
|
|
||
|
# Credenciales desde archivo de configuración
|
||
|
parser = cfg.ConfigParser()
|
||
|
parser.read('./conf/config.cfg')
|
||
|
token = parser.get('creds', 'token')
|
||
|
user = parser.get('creds', 'user')
|
||
|
|
||
|
# Creación objeto Updater
|
||
|
updater = Updater(token=token, use_context=True)
|
||
|
dispatcher = updater.dispatcher
|
||
|
|
||
|
# Config. modulo de logging
|
||
|
logging.basicConfig(
|
||
|
filename='./conf/bot.log',
|
||
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||
|
level=logging.INFO)
|
||
|
|
||
|
# Funciónes 'callback'
|
||
|
def start(update, context):
|
||
|
""" Envía respuesta de texto (text=string) """
|
||
|
context.bot.send_message(chat_id=update.effective_chat.id, text="Hola hola pianola!!")
|
||
|
|
||
|
def echo(update, context):
|
||
|
""" Envía como respuesta el texto recibido """
|
||
|
context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text)
|
||
|
|
||
|
def caps(update, context):
|
||
|
""" Envia como respuesta el texto recibido, capitalizado """
|
||
|
text_caps = ' '.join(context.args).upper()
|
||
|
context.bot.send_message(chat_id=update.effective_chat.id, text=text_caps)
|
||
|
|
||
|
def huhuu(update, context):
|
||
|
""" Envia respuesta de audio (archivo) """
|
||
|
context.bot.send_audio(chat_id=update.effective_chat.id, audio=open('./media/huhuu.wav', 'rb'))
|
||
|
|
||
|
def desconocido(update, context):
|
||
|
""" Envía respuesta de texto si no reconoce el comando recibido """
|
||
|
respuestas = [
|
||
|
'No puedo ayudarte!',
|
||
|
'No entiendo lo que dices!',
|
||
|
'Mucho no bueno!',
|
||
|
'Un gran poder, conlleva una gran resposabilidad',
|
||
|
'QUITAN TRABAOhjOJOoOHHH!',
|
||
|
'For great justice',
|
||
|
'No siempre lloverá',
|
||
|
'mamá dice q la vida es como una caja de bombones ...',
|
||
|
'Mucho agradezco'
|
||
|
]
|
||
|
resp_desc = random.choice(respuestas)
|
||
|
context.bot.send_message(chat_id=update.effective_chat.id, text=resp_desc)
|
||
|
|
||
|
def allyb(update, context):
|
||
|
""" Envia img como respuesta """
|
||
|
context.bot.send_photo(chat_id=update.effective_chat.id, photo=open('./media/allyb.png', 'rb'))
|
||
|
|
||
|
# Trabajo activado a petición
|
||
|
def alarma(context: telegram.ext.CallbackContext):
|
||
|
""" Envia txt como alarma """
|
||
|
context.bot.send_message(chat_id=context.job.context, text='BEEEEP!!')
|
||
|
|
||
|
def timer_minuto(update: telegram.Update, context: telegram.ext.CallbackContext):
|
||
|
""" Tarea corre un minuto despues de llamarla """
|
||
|
context.bot.send_message(chat_id=update.message.chat_id, text='TIMER Activado: ⏰️ 1 minuto')
|
||
|
context.job_queue.run_once(alarma, 60, context=update.message.chat_id)
|
||
|
|
||
|
|
||
|
# Creación de manejadores de funciones CallBack
|
||
|
start_handler = CommandHandler('start', start)
|
||
|
echo_handler = MessageHandler(Filters.text & (~Filters.command), echo)
|
||
|
caps_handler = CommandHandler('caps', caps)
|
||
|
huhuu_handler = CommandHandler('huhuu', huhuu)
|
||
|
allyb_handler = CommandHandler('allyb', allyb)
|
||
|
timer_handler = CommandHandler('timer', timer_minuto)
|
||
|
descon_handler = MessageHandler(Filters.command, desconocido)
|
||
|
|
||
|
# Agregar manejadores a dispatcher
|
||
|
dispatcher.add_handler(start_handler)
|
||
|
dispatcher.add_handler(echo_handler)
|
||
|
dispatcher.add_handler(caps_handler)
|
||
|
dispatcher.add_handler(huhuu_handler)
|
||
|
dispatcher.add_handler(allyb_handler)
|
||
|
dispatcher.add_handler(timer_handler)
|
||
|
dispatcher.add_handler(descon_handler)
|
||
|
|
||
|
# Cola de trabajos
|
||
|
jobs = updater.job_queue
|
||
|
|
||
|
# Trabajo cada minuto
|
||
|
def cada_minuto(context: telegram.ext.CallbackContext):
|
||
|
""" Ejemplo job cada 1 minuto """
|
||
|
context.bot.send_message(chat_id=user, text='test msg cada minuto')
|
||
|
|
||
|
job_minuto = jobs.run_repeating(cada_minuto, interval=60, first=0)
|
||
|
|
||
|
# Solo una vez, con desfase de 5 seg.
|
||
|
def callback_5(context: telegram.ext.CallbackContext):
|
||
|
""" Aviso inicio bot pasado 5 segundos """
|
||
|
context.bot.send_message(chat_id=user, text='BastardBot Iniciado')
|
||
|
|
||
|
jobs.run_once(callback_5, 5)
|
||
|
|
||
|
# Alerta cambio ip pública, cada 30 minutos
|
||
|
def ip_alert(context: telegram.ext.CallbackContext):
|
||
|
""" Alerta, registra e informa cambio de ip pública """
|
||
|
try:
|
||
|
with open('./conf/last_ipp', 'r') as last_ipp_file:
|
||
|
last_ipp = last_ipp_file.read()
|
||
|
# No shell user
|
||
|
# real_ipp = os.popen('curl -s ifconfig.me').readline()
|
||
|
real_ipp = fetchip.get_public_ip()
|
||
|
if real_ipp != last_ipp:
|
||
|
context.bot.send_message(chat_id=user, text=real_ipp)
|
||
|
with open('./conf/last_ipp', 'w') as archivo:
|
||
|
archivo.write(real_ipp)
|
||
|
except Exception as ex:
|
||
|
report = 'Error IP-alert :' + ex
|
||
|
context.bot.send_message(chat_id=user, text=report)
|
||
|
|
||
|
job_ipp = jobs.run_repeating(ip_alert, interval=1800, first=0)
|
||
|
|
||
|
# Deshabilitar tarea
|
||
|
job_minuto.enabled = False
|
||
|
# Remover tarea
|
||
|
#job_minuto.schedule_removal()
|
||
|
|
||
|
# Iniciar Bot
|
||
|
updater.start_polling()
|