Añadido escapado de carácteres para Markdown

This commit is contained in:
Joan Cano
2023-03-02 11:25:24 +01:00
parent b6c8c6bd24
commit f453ea820f
3 changed files with 5 additions and 13 deletions

View File

@@ -3,7 +3,6 @@ import os
import threading import threading
import logging import logging
import prettytable import prettytable
import helpers
from worker import Worker from worker import Worker
from telegram import Update from telegram import Update
@@ -38,7 +37,7 @@ Ejemplo 2: `/add cpu;10;30;;intel,core 2 duo,celeron;;;100`\n
Los campos opcionales que se dejen vacíos tomarán el valor configurado en el archivo `\.env`\n Los campos opcionales que se dejen vacíos tomarán el valor configurado en el archivo `\.env`\n
Lista los productos con `/list` o obtén la información de uno en concreto con `/list nombre del producto`\n Lista los productos con `/list` o obtén la información de uno en concreto con `/list nombre del producto`\n
Borra un producto con `/remove nombre del producto`""" Borra un producto con `/remove nombre del producto`"""
await update.message.reply_markdown_v2(helpers.telegram_escape_characters(message)) await update.message.reply_markdown_v2(telegram.helpers.escape_markdown(message))
async def add_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: async def add_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
message = """Tienes que pasar el número correcto de parámetros: `/add producto;precio_mínimo;precio_máximo,excluir_título(opcional, separado por comas);excluir_descripción_y_título(opciona, separado por comas);latitud(opcional);longitud(opcional),distancia(opcional)`\n message = """Tienes que pasar el número correcto de parámetros: `/add producto;precio_mínimo;precio_máximo,excluir_título(opcional, separado por comas);excluir_descripción_y_título(opciona, separado por comas);latitud(opcional);longitud(opcional),distancia(opcional)`\n
@@ -89,7 +88,7 @@ Los campos opcionales que se dejen vacíos tomarán el valor configurado en el a
message = f"Añadido {product_name} a seguimiento" message = f"Añadido {product_name} a seguimiento"
else: else:
message = f"{product_name} ya está en seguimiento!" message = f"{product_name} ya está en seguimiento!"
await update.message.reply_markdown_v2(helpers.telegram_escape_characters(message)) await update.message.reply_markdown_v2(telegram.helpers.escape_markdown(message))
async def remove_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: async def remove_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
product_to_remove = update.message.text[len('/remove '):] product_to_remove = update.message.text[len('/remove '):]
@@ -124,7 +123,7 @@ async def list_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No
table.align['Máx'] = 'r' table.align['Máx'] = 'r'
for product in products: for product in products:
table.add_row([product['product_name'], f"{product['min_price']}", f"{product['max_price']}"]) table.add_row([product['product_name'], f"{product['min_price']}", f"{product['max_price']}"])
await update.message.reply_markdown_v2(f'```{helpers.telegram_escape_characters(table)}```') await update.message.reply_markdown_v2(f'```{telegram.helpers.escape_markdown(table)}```')
def main()->None: def main()->None:
products = parse_json_file() products = parse_json_file()

View File

@@ -1,6 +0,0 @@
TELEGRAM_ESCAPE_CHARACTERS = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']
def telegram_escape_characters(text):
for character in TELEGRAM_ESCAPE_CHARACTERS:
text = text.replace(character, f'\{character}')
return text

View File

@@ -4,7 +4,6 @@ import telegram
import os import os
import logging import logging
import json import json
import helpers
TELEGRAM_CHANNEL_ID = os.getenv("TELEGRAM_CHANNEL_ID") TELEGRAM_CHANNEL_ID = os.getenv("TELEGRAM_CHANNEL_ID")
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN") TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
@@ -77,11 +76,11 @@ class Worker:
if not self.has_excluded_words(article['title'].lower(), article['description'].lower(), product['exclude']) and not self.is_title_key_word_excluded(article['title'].lower(), product['title_keyword_exclude']): if not self.has_excluded_words(article['title'].lower(), article['description'].lower(), product['exclude']) and not self.is_title_key_word_excluded(article['title'].lower(), product['title_keyword_exclude']):
try: try:
text = f"*Artículo*: {article['title']}\n*Descripción*: {article['description']}\n*Precio*: {article['price']} {article['currency']}\n[Ir al anuncio](https://es.wallapop.com/item/{article['web_slug']})".replace(".", "\.") text = f"*Artículo*: {article['title']}\n*Descripción*: {article['description']}\n*Precio*: {article['price']} {article['currency']}\n[Ir al anuncio](https://es.wallapop.com/item/{article['web_slug']})".replace(".", "\.")
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage?chat_id={TELEGRAM_CHANNEL_ID}&text={helpers.telegram_escape_characters(text)}&parse_mode=MarkdownV2" url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage?chat_id={TELEGRAM_CHANNEL_ID}&text={telegram.helpers.escape_markdown(text)}&parse_mode=MarkdownV2"
logging.info(requests.get(url).json()) logging.info(requests.get(url).json())
except: except:
text = f"*Artículo*: {article['title']}\n*Descripción*: {article['description']}\n*Precio*: {article['price']} {article['currency']}\n[Ir al anuncio](https://es.wallapop.com/item/{article['web_slug']})".replace(".", "\.") text = f"*Artículo*: {article['title']}\n*Descripción*: {article['description']}\n*Precio*: {article['price']} {article['currency']}\n[Ir al anuncio](https://es.wallapop.com/item/{article['web_slug']})".replace(".", "\.")
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage?chat_id={TELEGRAM_CHANNEL_ID}&text={helpers.telegram_escape_characters(text)}&parse_mode=MarkdownV2" url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage?chat_id={TELEGRAM_CHANNEL_ID}&text={telegram.helpers.escape_markdown(text)}&parse_mode=MarkdownV2"
requests.get(url) requests.get(url)
time.sleep(1) # Avoid Telegram flood restriction time.sleep(1) # Avoid Telegram flood restriction
list.insert(0, article['id']) list.insert(0, article['id'])