[Plataforma] [Tutorial] Creando un bot de Telegram
-
Hilo en construcción
Me apetece crearme un bot para enviarme algo de información de vez en cuando o para calcular algunas cosas, así que iré poniendo por aquí lo que vaya haciendo (si tengo paciencia).
@Pixel dice que él es un experto en el tema, así que también va a contribuir
Para los despistados, algunos ejemplos de bots:
-ExodoBot: el bot para leer y escribir en éxodo. Dirijan sus quejas a @kNN.
-ImageTranslateBot: de viaje por Japón? Te has comprado una SIM para que no te sablen con el roaming? Sácale una foto a los carteles y este bot te los traduce. Yo lo probé con japonés y funciona más o menos bien, así que con idiomas occidentales me imagino que irá incluso mejorPara usuarios de WINDOWS, id a este ESTE POST de @Pixel para aprender a instalar Python.
De momento estoy empezando con esta librería de Python:
https://github.com/python-telegram-bot/python-telegram-botPara instalarla:
pip install python-telegram-bot --upgrade
O bien:
git clone https://github.com/python-telegram-bot/python-telegram-bot cd python-telegram-bot python setup.py install
Supongo que en Windows se hará parecido, pero yo nunca he usado Python fuera de Linux
De momento poco más he hecho que mirar este ejemplo:
https://github.com/python-telegram-bot/python-telegram-bot/blob/master/examples/echobot2.pySe mete en un archivo.py y después sólo hay que sustituir "TOKEN" por el código que os da el "@BotFather" cuando os creáis un bot.
Para ponerlo a funcionar basta con ejecutarlopython archivo.py
Y ya podéis hablar con el bot... que de momento no hace nada más que repetir lo que le escribís....
-
mis dies tienes
-
2
Pillo sitio y todo eso.
Nos enseñarás a hacer cosa maléficas?
-
3
Pillo sitio. Yo quiero saber como mandar un mensaje sin escribir muchas líneas xD
Asi m cambio a tu libreria, yo usaba otra.
-
4
Pues muy interesante todo.
-
5
10/10 Muy buen hilo.
-
Bueno, ayer me hice una "calculadora". La idea es que le escribo una fórmula y el valor en el que quiero evaluarla, y me devuelve el resultado. Por ejemplo:
/calc sin(2*pi*x/4.7)/3+exp(-3*y)-1.5 4.3 1.2
Con ese comando el bot interpreta
sin(2*pi*x/4.7)/3+exp(-3*y)-1.5
Como una función y la evalúa en x=4.3, y=1.2 (lo escribo como x = [4.3, 1.2], que es más fácil xD)
Function 'sin(2*pi*x/4.7)/3+exp(-3*y)-1.5' evaluated at 'x= [4.3, 1.2]': -1.6425483099594653
Para que el bot le haga caso a mis comandos y pueda responder a ellos, al principio tengo que importar:
from telegram.ext import Updater, CommandHandler
Y después de dp=updater.dispatcher añado:
dp.add_handler(CommandHandler("calc", calc, pass_args=True))
Eso hará que cuando yo escriba el comando "/calc hola adiós" el bot ejecute la función "calc" con argumentos args = ["hola", "adiós"]. Sólo hay que definir la función "calc":
def calc(bot, update, args): user = update.message.from_user #éste es el usuario que ha escrito un mensaje al bot if user.id not in id_whitelist: #esto es una lista en la que he metido el id de los usuarios a los que permito usar el bot return update.message.reply_text("Error: invalid formula: "+str(args)) #esta línea responde al usuario. "args" es una lista de python, podéis acceder a ella con un "for arg in args:"...
Lo he simplificado 100% (de hecho no podéis ver aún cómo calculo la fórmula, pero bueno, eso lo hago con unas librerías que tengo instaladas, no me lo he inventado yo
, así que no os perdéis nada
)
Este ejemplo debería ser suficiente para que @Pixel mejore su bot xD.
-
7
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
-
8
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
Tan simple no puedes hacerlo, para enviar una respuesta necesitas indicar a quien la envías, y para ello necesitarás primero esperar que un usuario te envíe un mensaje. Y para ello, necesitas si o si, definir una función que haga de "handler" para el evento de recibir mensaje (comando).
De todas formas, una vez tengas un identificador de usuario, debe haber una función que reciba el identificador y el mensaje de respuesta, así que lo que tu quieres hacer se podría hacer con identificadores que ya conozcas cuales son.
-
9
@kNN dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
Tan simple no puedes hacerlo, para enviar una respuesta necesitas indicar a quien la envías, y para ello necesitarás primero esperar que un usuario te envíe un mensaje. Y para ello, necesitas si o si, definir una función que haga de "handler" para el evento de recibir mensaje (comando).
De todas formas, una vez tengas un identificador de usuario, debe haber una función que reciba el identificador y el mensaje de respuesta, así que lo que tu quieres hacer se podría hacer con identificadores que ya conozcas cuales son.Yo actualmente hago esto (con otra librería):
TOKEN = " LJLKJLJ " #Aquí pongo el token del bot tb = telebot.TeleBot(TOKEN) tb.send_message('-188899999999L',"lkjasdlkfj") #mando un mensaje a un 'chat_id'
supongo que tendré que ver como declarar ese identificador y así poder sustituir
-
10
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
Mira aquí: https://github.com/eugenio412/PogomBOT/blob/master/pogobot.py#L589
Defines una variable updater y otra Bot. El updater es para recibir los mensajes, y el bot para controlar el bot(responder mensajes, etc.). Si haces algo como:
updater = Updater(token) b = Bot(token) logger.info("BotName: <%s>" % (b.name)) b.sendMessage(chat_id, text)
Edito: el updater no es necesario si no quieres estar atento de recibir mensajes.
-
11
@kNN dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
Mira aquí: https://github.com/eugenio412/PogomBOT/blob/master/pogobot.py#L589
Defines una variable updater y otra Bot. El updater es para recibir los mensajes, y el bot para controlar el bot(responder mensajes, etc.). Si haces algo como:
updater = Updater(token) b = Bot(token) logger.info("BotName: <%s>" % (b.name)) b.sendMessage(chat_id, text)
Edito: el updater no es necesario si no quieres estar atento de recibir mensajes.
mis dies
Thanks!!
from telegram import Bot TOKEN = '2asdfasdfasdfasdfasdfasE' # Ponemos nuestro Token generado con el @BotFather b = Bot(TOKEN) print b.send_message("-188888899999999H","lkjlkj")
con esto mando un mensaje sencillo, y me lo imprimo por consola para verlo. Ya puedo cambiar mis antiguos scripts por esta librería
-
12
Python en Windows
-
Nos descargaremos la versión 2.X (2.7 en el momento de crear este post) de la página de python https://www.python.org/ (en el momento de crear el post https://www.python.org/downloads/release/python-2712/). La instalamos y ya está, si nos pregunta algo de añadir las variables PATH le decimos que sí (si no, tocará hacerlo a mano!)
-
Para escribir el código podemos utilizar: Notepad++ (https://notepad-plus-plus.org/download/). Crearemos archivos con extensión .py
-
Para ejecutar los scripts:
a) Podemos hacer doble click sobre ellos
b) Desde Notepad++: Click en EJECUTAR -> "Ejecutar..." -> Escribimospython.exe "$(FULL_CURRENT_PATH)"
-> Pulsamos "Guardar..." -> Le ponemos un nombre y unas teclas (como SHIFT + F5). Luego pulsando esas teclas se ejecutaría el script.
@SgtBurden si quieres avisa de este post, para los novatos en el mundo de python que usen windows
-
-
13
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@kNN dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
Mira aquí: https://github.com/eugenio412/PogomBOT/blob/master/pogobot.py#L589
Defines una variable updater y otra Bot. El updater es para recibir los mensajes, y el bot para controlar el bot(responder mensajes, etc.). Si haces algo como:
updater = Updater(token) b = Bot(token) logger.info("BotName: <%s>" % (b.name)) b.sendMessage(chat_id, text)
Edito: el updater no es necesario si no quieres estar atento de recibir mensajes.
mis dies
Thanks!!
from telegram import Bot TOKEN = '2asdfasdfasdfasdfasdfasE' # Ponemos nuestro Token generado con el @BotFather b = Bot(TOKEN) print b.send_message("-188888899999999H","lkjlkj")
con esto mando un mensaje sencillo, y me lo imprimo por consola para verlo. Ya puedo cambiar mis antiguos scripts por esta librería
Ten en cuenta que un bot no puede enviar mensajes a usuarios que no hayan hecho "/start" en un chat con dicho bot (creo que Telegram lo limita para que no haya abusos
).
Pero si es sólo para ti, todo bien.
-
14
@SgtBurden dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@kNN dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden yo quiero hacer algo más tipo esto:
#!/usr/bin/env python # -*- coding: utf-8 -*- from telegram.ext import Updater updater = Updater('TOKEN') update.message.reply_text("Enviar una string simple")
pero eso no va porque 'update' no está definido, pero no sé como definirlo
con eso puedo sustituir esas lines de código en lo que tengo actualmente y borrar la otra librería (no me gusta mezclar
)
Mira aquí: https://github.com/eugenio412/PogomBOT/blob/master/pogobot.py#L589
Defines una variable updater y otra Bot. El updater es para recibir los mensajes, y el bot para controlar el bot(responder mensajes, etc.). Si haces algo como:
updater = Updater(token) b = Bot(token) logger.info("BotName: <%s>" % (b.name)) b.sendMessage(chat_id, text)
Edito: el updater no es necesario si no quieres estar atento de recibir mensajes.
mis dies
Thanks!!
from telegram import Bot TOKEN = '2asdfasdfasdfasdfasdfasE' # Ponemos nuestro Token generado con el @BotFather b = Bot(TOKEN) print b.send_message("-188888899999999H","lkjlkj")
con esto mando un mensaje sencillo, y me lo imprimo por consola para verlo. Ya puedo cambiar mis antiguos scripts por esta librería
Ten en cuenta que un bot no puede enviar mensajes a usuarios que no hayan hecho "/start" en un chat con dicho bot (creo que Telegram lo limita para que no haya abusos
).
Pero si es sólo para ti, todo bien.Es solo para mi, aqui cada uno que se haga su bot
-
15
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
Python en Windows
-
Nos descargaremos la versión 2.X (2.7 en el momento de crear este post) de la página de python https://www.python.org/ (en el momento de crear el post https://www.python.org/downloads/release/python-2712/). La instalamos y ya está, si nos pregunta algo de añadir las variables PATH le decimos que sí (si no, tocará hacerlo a mano!)
-
Para escribir el código podemos utilizar: Notepad++ (https://notepad-plus-plus.org/download/). Crearemos archivos con extensión .py
-
Para ejecutar los scripts:
a) Podemos hacer doble click sobre ellos
b) Desde Notepad++: Click en EJECUTAR -> "Ejecutar..." -> Escribimospython.exe "$(FULL_CURRENT_PATH)"
-> Pulsamos "Guardar..." -> Le ponemos un nombre y unas teclas (como SHIFT + F5). Luego pulsando esas teclas se ejecutaría el script.
@SgtBurden si quieres avisa de este post, para los novatos en el mundo de python que usen windows
Puedes añadir cómo se instalan las librerías desde Windows?
-
-
16
@SgtBurden dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
Python en Windows
-
Nos descargaremos la versión 2.X (2.7 en el momento de crear este post) de la página de python https://www.python.org/ (en el momento de crear el post https://www.python.org/downloads/release/python-2712/). La instalamos y ya está, si nos pregunta algo de añadir las variables PATH le decimos que sí (si no, tocará hacerlo a mano!)
-
Para escribir el código podemos utilizar: Notepad++ (https://notepad-plus-plus.org/download/). Crearemos archivos con extensión .py
-
Para ejecutar los scripts:
a) Podemos hacer doble click sobre ellos
b) Desde Notepad++: Click en EJECUTAR -> "Ejecutar..." -> Escribimospython.exe "$(FULL_CURRENT_PATH)"
-> Pulsamos "Guardar..." -> Le ponemos un nombre y unas teclas (como SHIFT + F5). Luego pulsando esas teclas se ejecutaría el script.
@SgtBurden si quieres avisa de este post, para los novatos en el mundo de python que usen windows
Puedes añadir cómo se instalan las librerías desde Windows?
con python se instala pip, y ya funciona igual. Lo importante es añadirlo al PATH (como en linux) porque si no, hay que entrar primero en la carpeta antes de poner
pip ....
opython ....
-
-
17
@SgtBurden o @kNN para mandar archivos me encuentro esto:
http://python-telegram-bot.readthedocs.io/en/latest/telegram.html#telegram.Bot.send_document
document – File to send. You can either pass a file_id as String to resend a file that is already on the Telegram servers, or upload a new file using multipart/form-data.
Sabéis a qué se refiere? he probado a leer un archivo y mandarlo sin éxito
ya no sé si por error mio o por lo de 'using multipart/form-data'
-
18
@Pixel dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
@SgtBurden o @kNN para mandar archivos me encuentro esto:
http://python-telegram-bot.readthedocs.io/en/latest/telegram.html#telegram.Bot.send_document
document – File to send. You can either pass a file_id as String to resend a file that is already on the Telegram servers, or upload a new file using multipart/form-data.
Sabéis a qué se refiere? he probado a leer un archivo y mandarlo sin éxito
ya no sé si por error mio o por lo de 'using multipart/form-data'
No se exactamente que quiere decir. Pero debe funcionar como este: https://geekytheory.com/telegram-programando-un-bot-en-python/. Supongo que con:
f = open('/path/to/file', 'rb') bot.send_document(chat_id, f)
debe funcionar. O quizás con:
bot.send_document(chat_id, '/path/to/file')
-
19
@kNN dijo en [Plataforma] [Tutorial] Creando un bot de Telegram:
f = open('/path/to/file', 'rb')
bot.send_document(chat_id, f)pues sí, sí que va
será fallo mio entonces. Dejo ya puestos el trozo de código para enviar un archivo:
#!/usr/bin/env python import telegram TOKEN = 'asdfasdf:asdfasdf' chat_id='-asdfasdfasdf' bot = telegram.Bot(TOKEN) with open('asdfasdfasdf', 'rb') as f: print bot.send_document(chat_id, f)