Commit 30573f21 authored by Jan Luc Tavares's avatar Jan Luc Tavares
Browse files

bot capaz de criar apenas lista e salvar em banco de dados

parents
import sqlite3
class DBHelper:
def __init__(self, dbname="todo.sqlite"):
self.dbname = dbname
self.conn = sqlite3.connect(dbname)
def setup(self):
stmt = "CREATE TABLE IF NOT EXISTS items (description text)"
self.conn.execute(stmt)
self.conn.commit()
def add_item(self, item_text):
stmt = "INSERT INTO items (description) VALUES (?)"
args = (item_text, )
self.conn.execute(stmt, args)
self.conn.commit()
def delete_item(self, item_text):
stmt = "DELETE FROM items WHERE description = (?)"
args = (item_text, )
self.conn.execute(stmt, args)
self.conn.commit()
def get_items(self):
stmt = "SELECT description FROM items"
return [x[0] for x in self.conn.execute(stmt)]
\ No newline at end of file
# Esse codigo para bot do Telegram foi construido baseado no seguinte tutorial:
# https://www.codementor.io/garethdwyer/building-a-telegram-bot-using-python-part-1-goi5fncay
#
# Pode ser mais simples (tanto no desenvolvimento quanto para portabilidade e aprendizagem a ser realizada com esse codigo)
#
# VERSION 2: Nessa versao implementarei o banco de dados. A versao anterior somente respondia as mensagens recebidas "echo".
#
import json
import requests
import time
import urllib #biblioteca necessaria para a codificacao do texto em forma de url
from dbhelper import DBHelper
from secretoken import tokensecret
db = DBHelper()
TOKEN = tokensecret()
URL = "https://api.telegram.org/bot{}/".format(TOKEN)
def get_url(url):
response = requests.get(url)
content = response.content.decode("utf8")
return content
def get_json_from_url(url):
content = get_url(url)
js = json.loads(content)
return js
def get_updates(offset=None):
url = URL + "getUpdates?timeout=100"
if offset:
url += "&offset={}".format(offset)
js = get_json_from_url(url)
return js
def get_next_update_id(updates):
update_ids = []
for update in updates["result"]:
update_ids.append(int(update["update_id"]))
return (max(update_ids) + 1)
def get_last_chat_id_and_text(updates):
num_updates = len(updates["result"])
last_update = num_updates - 1
text = updates["result"][last_update]["message"]["text"]
chat_id = updates["result"][last_update]["message"]["chat"]["id"]
return (text, chat_id)
def send_message(text, chat_id, reply_markup=None):
text = urllib.parse.quote_plus(text)
url = URL + "sendMessage?text={}&chat_id={}".format(text, chat_id)
if reply_markup:
url += "&reply_markup={}".format(reply_markup)
get_url(url)
def handle_updates(updates):
for update in updates["result"]:
try:
text = update["message"]["text"]
chat = update["message"]["chat"]["id"]
items = db.get_items()
if text in items:
db.delete_item(text)
items = db.get_items()
else:
db.add_item(text)
items = db.get_items()
message = "\n".join(items)
teclado = build_keyboard(items)
send_message(message, chat, teclado)
except KeyError:
pass
def build_keyboard(items):
keyboard = [[item] for item in items]
reply_markup = {"keyboard":keyboard, "one_time_keyboard": True}
return json.dumps(reply_markup)
def main():
next_update_id = None
db.setup()
while True:
updates = get_updates(next_update_id)
if len(updates["result"]) > 0:
next_update_id = get_next_update_id(updates)
handle_updates(updates)
time.sleep(0.5)
if __name__ == '__main__':
main()
<option value="-1"></option><option value="1">id=1 usuário="admin" estação="PezziProto"</option><option value="2">id=2 usuário="admin" estação="CTA_Pi+RMv0.1"</option><option value="3">id=3 usuário="admin" estação="AP-CEU"</option><option value="4">id=4 usuário="nelsojost" estação="ADay16-RMv0.1"</option><option value="5">id=5 usuário="nelsojost" estação="teste"</option><option value="6">id=6 usuário="hiure" estação="Sitio do Astronauta"</option><option value="7">id=7 usuário="nelsojost" estação="teste_campo_bom"</option><option value="8">id=8 usuário="Luis.f" estação="CTA_Jr_Teste"</option><option value="17">id=17 usuário="Luis.f" estação="Estação_Setembro"</option><option value="18">id=18 usuário="Luis.f" estação="teste2"</option><option value="22">id=22 usuário="yatokami" estação="Teste CTA jr 12/16"</option><option value="23">id=23 usuário="admin" estação="rafa-hcpa"</option><option value="24">id=24 usuário="IgorGusmao" estação="Gilberto DÀvila Yag"</option>
Bot das EMM para Telegram
====================================================
Repositório: https://git.cta.if.ufrgs.br/emm/emm-bot
Decidimos realizar a construção do BOT no Telegram, por ser uma plataforma simples, bem documentada e amplamente utilizada. Objetiva-se, porém, permitir uma adaptabilidade fácil a outros meios.
Objetiva-se a capacidade de informar os parâmetros medidos pelas estações meteorológicas de forma muito simples e acessível.
----------------------------------------------------
Todo o código é disponibilizado sob a licença GPLv3.
Jan Luc Tavares,
Agosto de 2017.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment