|
| 1 | +"""Simple Telegram Bot which parse .xlsx file by user message pattern""" |
| 2 | + |
1 | 3 | import os |
2 | 4 | from telegram import Update |
3 | 5 | from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes |
|
7 | 9 | XLSX_FILE_PATH = os.getenv("XLSX_FILE_PATH") |
8 | 10 |
|
9 | 11 | async def find(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: |
| 12 | + """Function which parse excel file by user message and send response to Telegram Bot""" |
10 | 13 | if update.message and update.message.text: |
11 | 14 | workbook = load_workbook(XLSX_FILE_PATH) |
12 | 15 | sheet = workbook.active |
13 | 16 | headers = get_headers(sheet) |
14 | 17 | keywords_column = headers.get('Keywords') |
15 | 18 | links_column = headers.get('Link') |
| 19 | + tencode_column = headers.get('Ten-code') |
| 20 | + name_column = headers.get('Name') |
| 21 | + parsed_message = update.message.text.replace("/find", "").strip() |
16 | 22 | response_message = '' |
17 | 23 |
|
18 | | - if keywords_column and links_column: |
19 | | - for row in sheet.iter_rows(): |
20 | | - parsed_message = update.message.text.replace("/find", "").strip() |
21 | | - keywords = str(row[keywords_column - 1].value).replace(" ", "").split(";") |
22 | | - keyword_match = any(element in parsed_message for element in keywords) |
23 | | - if keyword_match: |
24 | | - response_message += row[links_column - 1].value |
25 | | - |
| 24 | + if any(char.isdigit() for char in parsed_message): |
| 25 | + if tencode_column: |
| 26 | + for row in sheet.iter_rows(): |
| 27 | + tencode = str(row[tencode_column - 1].value) |
| 28 | + if parsed_message == tencode: |
| 29 | + response_message += f"{row[name_column - 1].value} : {row[links_column - 1].value}" |
| 30 | + else: |
| 31 | + if keywords_column and links_column: |
| 32 | + for row in sheet.iter_rows(): |
| 33 | + keywords = str(row[keywords_column - 1].value).split(";") |
| 34 | + trimmed_keywords = [s.lstrip() for s in keywords] |
| 35 | + lower_keywords = [s.lower() for s in trimmed_keywords] |
| 36 | + if parsed_message.lower() in lower_keywords: |
| 37 | + response_message += f"{row[name_column - 1].value} : {row[links_column - 1].value}" |
| 38 | + |
| 39 | + if response_message == '': |
| 40 | + response_message += "Not Found" |
| 41 | + |
26 | 42 | await update.message.reply_text(f"{response_message}") |
27 | 43 |
|
28 | 44 | def get_headers(sheet: any ) -> dict: |
| 45 | + """Function which return excel column ids and cells as dictionary""" |
29 | 46 | headers = {} |
30 | 47 | for col_idx, cell in enumerate(sheet[1], start=1): |
31 | 48 | headers[cell.value] = col_idx |
32 | | - |
| 49 | + |
33 | 50 | return headers |
34 | 51 |
|
35 | 52 | def main(): |
| 53 | + """Main function""" |
36 | 54 | try: |
37 | 55 | app = ApplicationBuilder().token(TELEGRAM_BOT_TOKEN).build() |
38 | 56 | app.add_handler(CommandHandler("find", find)) |
| 57 | + app.add_handler(CommandHandler("f", find)) |
39 | 58 | app.run_polling() |
40 | 59 | except Exception as err: |
41 | 60 | print(f"Unexpected {err=}, {type(err)=}") |
42 | 61 |
|
43 | 62 | if __name__ == "__main__": |
44 | 63 | main() |
| 64 | + |
| 65 | + |
| 66 | +if __name__ == "__main__": |
| 67 | + main() |
0 commit comments