자유 그리고 경험

텔레그램 봇 활용, 암기카드(사전) 만들기 본문

기술

텔레그램 봇 활용, 암기카드(사전) 만들기

배아줄기세포 2022. 6. 24. 22:25
반응형

개요

텔레그램 봇을 이용해, 키워드를 입력하면 키워드에 맞는 간단한 설명을 출력하도록 봇을 만들어보려고 한다.

 

파이썬 텔레그램 봇
파이썬 텔레그램 봇

스펙

  • python
  • DB sqlite3 - 디비를 파일로 만들기 때문에, 이식이 쉽고 로그인 등 귀찮은 부분을 설정할 필요가 없어서 빠른 제작에 용이하다.

설명

  • 텔레그램 봇 생성 방법과 간단한 사용은 다른 포스팅에서 다뤘다.
    2022.05.26 - [기술] - 파이썬(python)으로 텔레그램 봇 만들기
  • 명령어는 두가지만 넣었다. 
    • /start - DB와 table을 생성한다.
    • /f 단어 - 단어를 검색한다. (띄어쓰기 가능)
  • 단어를 입력하는 부분은 없다. 텔레그램에서 각 단어를 생성하고 설명을 넣기에는 ui가 좋지 않기 때문에 단어는 엑셀이나 스프레드시트에 입력 후 일괄로 DB에 넣도록 한다.

  • 입력을 HeidiSql을 이용해 수작업으로 입력하였지만, 추후 더 편한 방법을 찾도록 해야겠다.

코드

#기본 모듈
import sqlite3
import os

from telegram import ParseMode
from telegram.ext import CommandHandler, Defaults, Updater

db_path = os.path.dirname(__file__)+'/mydb.db'
TELEGRAM_TOKEN="토큰 넣기"

#start 명령어. 한 스레드마다 commit을 해줘야 한다
def start(update, context):
    conn = sqlite3.connect(db_path)
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS dict (
            ID integer primary key autoincrement,
            keyword text, description text)''')
    conn.commit()
    context.bot.send_message(chat_id=update.effective_chat.id, text="시작!")

#단순히 keyword를 keyword 칼럼에서 찾아서 그 설명(description)을 출력한다.
def find(update, context):
    keyword = " ".join(context.args)  #띄어쓰기를 한 단어로 합치도록 처리

    conn = sqlite3.connect(db_path)
    c = conn.cursor()
    c.execute(f"SELECT description FROM dict WHERE keyword = '{keyword}' ")
    rows = c.fetchall()
    if len(rows) != 0:
        response = keyword + '\n\n' + rows[0][0]
    else:  #정확한 단어가 없는 경우 단어가 포함된 키워드 추천
        response = "없는 단어입니다."
        c.execute(f"SELECT keyword FROM dict WHERE keyword LIKE '%{keyword}%' ")
        rows = c.fetchall()
        if len(rows)!= 0:
            joinRow = ""
            for row in rows:
                joinRow+=" ,"+row[0]
            response += f'''\n추천 키워드 : {joinRow}'''

    conn.commit()
    context.bot.send_message(chat_id=update.effective_chat.id, text=response)

#다른 포스팅에서 나온 대화부분
if __name__ == '__main__':
    updater = Updater(token=TELEGRAM_TOKEN, defaults=Defaults(parse_mode=ParseMode.HTML))
    dispatcher = updater.dispatcher
    
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CommandHandler('f', find))

    updater.start_polling() # Start the bot
    updater.idle() # Wait for the script to be stopped, this will stop the bot as well

몇 줄의 코드로 단어장 봇을 완성하였다!

Develop

  • 정확한 단어가 없을 시, 유사한 단어 찾아서 키워드 추천해주는 기능.     완료
  • sqlite3가 아닌 mysql과 같은 db로 옮겨 그림자료 추가
  • 단어카드 내부에서 다른 단어를 검색할 수 있는 링크 생성
반응형
Comments