ããã«ã¡ã¯ãhabrchaneïŒ python3ã§é»å ±ããããäœæãããšãããããã³ã°ãããããŒããäœã§ãããã³ãŒãã®æåã®è¡ãããããã®å±éãŸã§ã®ãã¹ã瀺ãæ瀺ã¯èŠã€ãããŸããã§ããïŒå°ãªããšãç§ãèŠããã¹ãŠã®æ¹æ³ã¯å°ãæ代é
ãã§ãïŒã ãã®èšäºã§ã¯ãBotFatherã®äœæããHerokuãžã®ãããã®ãããã€ãŸã§ãããããäœæããããã»ã¹ã瀺ããŸãã
èšäºã¯é·ãããšãå€æããŸãããå
容ã確èªããŠãèå³ã®ããé
ç®ãã¯ãªãã¯ããŠãã ããã
PSããè€éãªãããã®äœæã«é¢ããèšäºãã€ãŸã webhookããŠãŒã¶ãŒèšå®ãªã©ã®ããŒã¿ããŒã¹ã䜿çšããŸãã
ãŸããããããäœããããã決å®ãã䟡å€ããããŸãã 解æããŠHabrã®ããããŒãæäŸãããåçŽãªããããäœæããããšã«ããŸããã
ããã§ã¯ãå§ããŸãããã
ããããã¡ãŒã¶ãŒ
ãŸããããããTelegramã«ç»é²ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ïŒ
@BotFatherã®æ€çŽ¢ãã©ã€ãã§ããããã®ç¶ãšã®å¯Ÿè©±ã«å
¥ããŸãã
/ newbotãäœæããŸãã ãããã®ååïŒãã€ã¢ãã°ã«è¡šç€ºããããã®ïŒãæå®ããŸãã 圌ãèŠã€ããããšãã§ãã圌ã®ãŠãŒã¶ãŒåã瀺ããŸãã
PSããã¯ããã/ãããã§çµäºããå¿
èŠããããŸã
ãã£ã¡ APIããŒãšããããžã®ãªã³ã¯ãæäŸãããŸããã APIããŒãä¿åããŠããããšå¯Ÿè©±ããããšããå§ãããŸããããããããšã§ãåŸã§BotFatherãšã®éä¿¡ãæãäžããå¿
èŠããªããªããŸã
次ã«ãããã€ãã®ã³ãã³ããè¿œå ããŸãã/setcommandsãš
1ã€ã®ã¡ãã»ãŒãžãèšè¿°ã
ãŸã ã / setcommandsã¯ã³ãã³ããè¿œå ããŸããããæåããèšå®ããŸããã³ãã³ããéä¿¡ããŸãã
all - " "
top - ""
BotFatherã®äœæ¥ã¯ããã§çµããã§ãã次ã®éšåã«é²ã¿ãŸãããã
pipenvãã€ã³ã¹ããŒã«ããŠæ§æããŸãã æåã®æã¡äžãã
ãŸããã¡ã€ã³ã®
bot.pyã³ãŒããå«ãŸãããã¡ã€ã«ãäœæããŸãã ãããã倧ããå Žåãé¢æ°ãã¯ã©ã¹ãªã©ãé
眮ãããã¡ã€ã«ãããã«äœæããŸããããããªããšãã³ãŒãã®å¯èªæ§ããŒãã«ãªãåŸåããããŸãã parser.pyãè¿œå ããŸã
ãã¡ãããªãå Žåã¯
pipenvãã€ã³ã¹ããŒã«ããŠ
ãã ãã ã
Windowsã®å ŽåïŒ
pip install pipenv
Linuxã®å ŽåïŒ
sudo pip3 install pipenv
ãããžã§ã¯ããã©ã«ããŒã«pipenvãã€ã³ã¹ããŒã«ããŸãã
pipenv install
èå³ã®ããã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã PyTelegramBotAPIã䜿çšããŸãã 解æã®ããã«ããBeautifulSoup4ãè¿œå ããŸãã
pipenv install PyTelegramBotAPI pipenv install beautifulsoup4
ã³ãŒããæžãå§ããŠããŸãïŒ
bot.pyãéããã©ã€ãã©ãªãã€ã³ããŒãããŠã¡ã€ã³å€æ°ãäœæããŸãã
import telebot import parser
ããããå®è¡ããŸãã ãšã©ãŒãæ¢ããŸãã
éå§æ¹æ³Windowsã®å ŽåïŒ
python bot.py
Linuxã®å ŽåïŒ
python3 bot.py
ãšã©ãŒã衚瀺ãããªãå Žåã¯ãç¶è¡ããŸãã
ãã³ãã©ãŒã ã³ãã³ããšã¡ãã»ãŒãžã«å¿çããŸã
ãããã«å¿çããããã«æ瀺ããæéã§ãã 圌ã®çãã圹ã«ç«ã€ãã®ã«ããããšããå¯èœã§ãã
çžäºäœçšã®åºæ¬ã ã³ãã³ããžã®å¿ç
ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãã€ãŸã ãã³ãã©ãŒã¯ã圌ã®ã³ãã³ããšã¡ãã»ãŒãžã«å¿çããããã«äœ¿çšãããŸãã
æãåçŽãªãã®ããå§ããŸãããïŒã³ãã³ã/ startããã³/ goã«çããŸã
@bot.message_handler(commands=['start', 'go']) def start_handler(message): bot.send_message(message.chat.id, ', , ') bot.polling()
次ã«ããããäœã§ãããã©ã®ããã«æ©èœããããç解ããŸãããã æååãå«ãé
åã«çããmessage_handlerãã©ã¡ãŒã¿ãŒã³ãã³ããæž¡ããŸããã³ãã³ãã¯ã以äžã§èª¬æããããã«å¿çããŸãã ïŒåœŒã¯ããããã¹ãŠã®ã³ãã³ãã«åãããã«çããŸãïŒã 次ã«ãsend_messageã䜿çšããããã«ãã£ããIDãæžã蟌ã¿ãŸãïŒmessage.chat.idããååŸã§ããŸãïŒãããã«ã¡ãã»ãŒãžãšå®éã«ã¯ã¡ãã»ãŒãžèªäœãéä¿¡ããŸãã ã³ãŒãã®æåŸã«bot.pollingïŒïŒãæžãããšãå¿ããªãã§ãã ãããããããªããšããããã¯ããã«ã·ã£ããããŠã³ããŸãã ãªããããªãã®ãã¯åŸã§ããããŸãã
ããã§ãããããéå§ãã圌ã«æžã蟌ã¿/éå§ãŸãã¯/è¡ãã°ã圌ã¯çããŸãã
PSã¡ãã»ãŒãžã¯æååã ãã§ãªããååãšããŠäœã§ãããŸããŸããã
PSSã¡ãã»ãŒãžãšã¯ïŒããã¯ãéä¿¡è
ããã£ãããããã³ã¡ãã»ãŒãžèªäœã«é¢ããæ
å ±ãæ ŒçŽããjsonãªããžã§ã¯ãã§ãã
{ 'content_type': 'text', 'message_id': 5, 'from_user': { 'id': 333960329, 'first_name': 'Nybkox', 'username': 'nybkox', 'last_name': None }, 'date': 1520186598, 'chat': { 'type': 'private', 'last_name': None, 'first_name': 'Nybkox', 'username': 'nybkox', 'id': 333960329, 'title': None, 'all_members_are_administrators': None }, 'forward_from_chat': None, 'forward_from': None, 'forward_date': None, 'reply_to_message': None, 'edit_date': None, 'text': '/start', 'entities': [<telebot.types.MessageEntity object at 0x7f3061f42710>], 'audio': None, 'document': None, 'photo': None, 'sticker': None, 'video': None, 'voice': None, 'caption': None, 'contact': None, 'location': None, 'venue': None, 'new_chat_member': None, 'left_chat_member': None, 'new_chat_title': None, 'new_chat_photo': None, 'delete_chat_photo': None, 'group_chat_created': None, 'supergroup_chat_created': None, 'channel_chat_created': None, 'migrate_to_chat_id': None, 'migrate_from_chat_id': None, 'pinned_message': None }
çžäºäœçšã®åºæ¬ã ããã¹ãã¡ãã»ãŒãžã«è¿ä¿¡ããŸãã
次ã«ããããã®ããã¹ãã¡ãã»ãŒãžãåŠçããŸãã ç¥ã£ãŠããå¿
èŠãããæãéèŠãªããšã¯ãã¡ãã»ãŒãžã®ããã¹ããmessage.textã«ä¿åãããŠããããšãšãmessage_handlerã§ããã¹ããåŠçããããã«content_types = ['text']ãæž¡ãå¿
èŠãããããšã§ãã
次ã®ã³ãŒããè¿œå ããŸãã
@bot.message_handler(content_types=['text']) def text_handler(message): text = message.text.lower() chat_id = message.chat.id if text == "": bot.send_message(chat_id, ', - .') elif text == " ?": bot.send_message(chat_id, ', ?') else: bot.send_message(chat_id, ', :(')
ããã§ãããã€ãã®å€æ°ãè¿œå ããŸããïŒå€æ°ããã¹ãå
ã®ã¡ãã»ãŒãžã®ããã¹ãã移åããŠïŒå°æåã§ããã£ããããã§ã³ã¹ãªã©ãæžãã人ã«äžå¿
èŠãªåé¡ãçããªãããã«ïŒãæ¯åãmessage.chat.idãåå¥ã®å€æ°ã«å
¥ããŸããã¡ãã»ãŒãžãåç
§ããŠãã ããã ãŸããç¹å®ã®ã¡ãã»ãŒãžã«å¿çããããã®å°ããªåå²ãšãç解ã§ããªããããã¡ãã»ãŒãžã®å Žåã®å¿çãæ§ç¯ããŸããã
çžäºäœçšã®åºæ¬ã åçãææžãé³å£°ãªã©ãžã®çãã
åçãã¹ããã«ãŒãææžãé³å£°ãªã©ã«å¿çãããã content_types = ['text']ãå€æŽããã ãã§ãã
ãã®ã³ãŒããè¿œå ããŠãåçä»ãã®äŸãæ€èšããŠãã ããã
@bot.message_handler(content_types=['photo']) def text_handler(message): chat_id = message.chat.id bot.send_message(chat_id, '.')
ãã¹ãŠã®ã¿ã€ãã®ã³ã³ãã³ãïŒ
text, audio, document, photo, sticker, video, video_note, voice, location, contact, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, pinned_message
ç§ãã¡ã¯äžé£ã®çããæ§ç¯ããŠããŸãã
åºæ¬çãªã¢ã¯ã·ã§ã³ãå®äºããŠãçå£ã«äœããå§ããæã§ãã çãã®é£éãæ§ç¯ããŠã¿ãŸãããã ããã«ã¯register_next_step_handlerïŒïŒãå¿
èŠã§ãã register_next_step_handlerïŒïŒã®ä»çµã¿ãç解ããããã®ç°¡åãªäŸãäœæããŸãããã
@bot.message_handler(commands=['start', 'go']) def start_handler(message): chat_id = message.chat.id text = message.text msg = bot.send_message(chat_id, ' ?') bot.register_next_step_handler(msg, askAge) def askAge(message): chat_id = message.chat.id text = message.text if not text.isdigit(): msg = bot.send_message(chat_id, ' , .') bot.register_next_step_handler(msg, askAge) #askSource return msg = bot.send_message(chat_id, ', ' + text + ' .')
ãã®ãããæåã®é¢æ°bot.register_next_step_handlerïŒmsgãaskAgeïŒãè¿œå ãããããã«éä¿¡ãããã¡ãã»ãŒãžãšããŠãŒã¶ãŒã®å¿çã®åŸã®æ¬¡ã®ã¹ããããéä¿¡ããŸãã
2çªç®ã®é¢æ°ã§ã¯ããã¹ãŠãããèå³æ·±ããã®ã§ããããã§ã¯ããŠãŒã¶ãŒãæ°åãå
¥åãããã©ããããã§ãã¯ããããã§ãªãå Žåã¯ãé¢æ°ã¯ã幎霢ã¯æ°åã§ãªããã°ãªããŸãããããäžåºŠå
¥åããŠãã ããããšããã¡ãã»ãŒãžã§ååž°çã«åŒã³åºããŸãã ãŠãŒã¶ãŒããã¹ãŠãæ£ããå
¥åããå ŽåããŠãŒã¶ãŒã¯å¿çãåãåããŸãã
ããããããã«ã¯åé¡ããããŸãã ã³ãã³ã/ goãŸãã¯/ startãååŒã³åºããããšãæ··ä¹±ãå§ãŸããŸãã
ããã¯ç°¡åã«ä¿®æ£ã§ããŸããã¹ã¯ãªããã®ã¹ããŒã¿ã¹ã確èªããå€æ°ãè¿œå ããŸãã
@bot.message_handler(commands=['start', 'go']) def start_handler(message): global isRunning if not isRunning: chat_id = message.chat.id text = message.text msg = bot.send_message(chat_id, ' ?') bot.register_next_step_handler(msg, askAge) #askSource isRunning = True def askAge(message): chat_id = message.chat.id text = message.text if not text.isdigit(): msg = bot.send_message(chat_id, ' , .') bot.register_next_step_handler(msg, askAge) #askSource return msg = bot.send_message(chat_id, ', ' + text + ' .') isRunning = False
åçŽãªãã§ãŒã³ã®æ§ç¯ã«ãããå
ã«é²ã¿ãŸãããã
ããŒãµãŒããã§ãŒã³ã«è¿œå ããŸãã
ãŸããããŒãµãŒèªäœãå¿
èŠã§ãã [ãã¹ã]ã¿ããš[è¡ã®ãã¹ãŠ]ã¿ãã«ã¯ãè¿œå ã®ãã£ã«ã¿ãŒããããŸãïŒããããæ¥ãé±ãæãâ¥10ãâ¥25ãâ¥50ãâ¥100ã®ãã£ã«ã¿ãŒãããããšã«æ³šæããŠãã ããã
ãã¡ããã1ã€ã®é¢æ°ã§ããŒãµãŒãäœæã§ããŸããã2ã€ã«åå²ããŠãã³ãŒããèªã¿ãããããŸãã
ããŒãµãŒã import urllib.request from bs4 import BeautifulSoup def getTitlesFromAll(amount, rating='all'): output = '' for i in range(1, amount+1): try: if rating == 'all': html = urllib.request.urlopen('https://habrahabr.ru/all/page'+ str(i) +'/').read() else: html = urllib.request.urlopen('https://habrahabr.ru/all/'+ rating +'/page'+ str(i) +'/').read() except urllib.error.HTTPError: print('Error 404 Not Found') break soup = BeautifulSoup(html, 'html.parser') title = soup.find_all('a', class_ = 'post__title_link') for i in title: i = i.get_text() output += ('- "'+i+'",\n') return output def getTitlesFromTop(amount, age='daily'): output = '' for i in range(1, amount+1): try: html = urllib.request.urlopen('https://habrahabr.ru/top/'+ age +'/page'+ str(i) +'/').read() except urllib.error.HTTPError: print('Error 404 Not Found') break soup = BeautifulSoup(html, 'html.parser') title = soup.find_all('a', class_ = 'post__title_link') for i in title: i = i.get_text() output += ('- "'+i+'",\n') return output
ãã®çµæãããŒãµãŒã¯ããªã¯ãšã¹ãã«åºã¥ããŠèšäºã®ã¿ã€ãã«ãå«ãè¡ãè¿ããŸãã
ååŸããç¥èã䜿çšããŠãããŒãµãŒã«é¢é£ä»ããããããããäœæããããšããŠããŸãã å¥ã®ã¯ã©ã¹ãäœæãïŒããã¯ããããééã£ãã¡ãœããã§ãããèšäºã®ã¡ã€ã³ãããã¯ã§ã¯ãªãpythonã«æ¢ã«é©çšãããŠããŸãïŒããã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã«å¯å€ããŒã¿ãä¿åããããšã«ããŸããã
æçµã³ãŒãïŒ
bot.py import telebot import bs4 from Task import Task import parser
ããã§ã¯
none_stop=True)
ã
bot.polling
ã«è¿œå ãã
bot.polling
ãããã¯ããã¹ãŠã®ãšã©ãŒã§ãããã
bot.polling
ããªãããã§ãã
Task.py class Task(): isRunning = False names = [ ['', '', ''], ['', ' ', 'all'] ] filters = [ ['', '', ''], [' ', '10', '25', '50', '100'] ] filters_code_names = [ ['daily', 'weekly', 'monthly'], ['all', 'top10', 'top25', 'top50', 'top100'] ] mySource = '' myFilter = '' def __init__(self): return
parser.py import urllib.request from bs4 import BeautifulSoup def getTitlesFromAll(amount, rating='all'): output = '' for i in range(1, amount+1): try: if rating == 'all': html = urllib.request.urlopen('https://habrahabr.ru/all/page'+ str(i) +'/').read() else: html = urllib.request.urlopen('https://habrahabr.ru/all/'+ rating +'/page'+ str(i) +'/').read() except urllib.error.HTTPError: print('Error 404 Not Found') break soup = BeautifulSoup(html, 'html.parser') title = soup.find_all('a', class_ = 'post__title_link') for i in title: i = i.get_text() output += ('- "'+i+'",\n') return output def getTitlesFromTop(amount, age='daily'): output = '' for i in range(1, amount+1): try: html = urllib.request.urlopen('https://habrahabr.ru/top/'+ age +'/page'+ str(i) +'/').read() except urllib.error.HTTPError: print('Error 404 Not Found') break soup = BeautifulSoup(html, 'html.parser') title = soup.find_all('a', class_ = 'post__title_link') for i in title: i = i.get_text() output += ('- "'+i+'",\n') return output
çè« ããããšã®çžäºäœçšã®æ¹æ³ã
é·ãããŒãªã³ã°ã䜿çšããŠããããããã¡ãã»ãŒãžã«é¢ããããŒã¿ãåä¿¡ããŸãã
bot.polling(none_stop=True)
å®å
šã«ç°ãªãæ¹æ³ã䜿çšãããªãã·ã§ã³ããããŸã-webhookã ãããã£ãŠããããèªäœã¯ãã¡ãã»ãŒãžã®åä¿¡ãªã©ã«é¢ããããŒã¿ãéä¿¡ããŸãã ãããããã®æ¹æ³ã¯æ§æãããé£ãããåçŽãªææ°é¢æ°åãããã®å Žåã䜿çšããªãããšã«ããŸããã
ãŸããè¿œå è³æã«ã¯ã䜿çšããããã¹ãŠã®å
容ãšçºèšå
容ãžã®ãªã³ã¯ããããŸãã
ãã«ã«ãã ããŒããŒããè¿œå ããŠãã°ããå¿çããŸãã
æåŸã«ãã¡ã€ã³ã³ãŒããè¿œå ãããŸãã ããã§ãããŒã¯ã¢ãããäŒãã§èšè¿°ã§ããŸãã äœåºŠãèŠãããšããããšæããŸãããããã§ãã¹ã¯ãªãŒã³ã·ã§ãããæ·»ä»ããŸãã [ã¹ã¯ãªãŒã³ã·ã§ãã]
ããŒã¯ã¢ãããå¥ã®ãã¡ã€ã«-markups.pyã§åºåããŸãã
ããŒã¯ã¢ããã®èšè¿°ã«è€éãªããšã¯ãããŸããã ããŒã¯ã¢ãããäœæããããã€ãã®ãã©ã¡ãŒã¿ãŒãæå®ãããã¿ã³ã®ãã¢ãäœæããŠããŒã¯ã¢ããã«è¿œå ãã
reply_markup=markup
ãæå®ããã ã
send_message
ã
äŸmarkups.py
from telebot import types source_markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True) source_markup_btn1 = types.KeyboardButton('') source_markup_btn2 = types.KeyboardButton(' ') source_markup.add(source_markup_btn1, source_markup_btn2)
ããŒã¯ã¢ããã®ãã©ã¡ãŒã¿ãŒã§ã¯ããã¿ã³ã®ç·å¹
ãšãµã€ãºå€æŽã瀺ããŸããããããªããšããã¿ã³ã巚倧ã«ãªããŸãã
ãã¡ãããåè¡ãåå¥ã«åããããšãã§ããŸãã markup = types.ReplyKeyboardMarkup() itembtna = types.KeyboardButton('a') itembtnv = types.KeyboardButton('v') itembtnc = types.KeyboardButton('c') itembtnd = types.KeyboardButton('d') itembtne = types.KeyboardButton('e') markup.row(itembtna, itembtnv) markup.row(itembtnc, itembtnd, itembtne)
bot.py
def start_handler(message): if not task.isRunning: chat_id = message.chat.id msg = bot.send_message(chat_id, ' ?', reply_markup=m.source_markup) bot.register_next_step_handler(msg, askSource) task.isRunning = True
ååŸããç¥èããããã«é©çšããŸãã
æçµã³ãŒãmarkups.py
from telebot import types start_markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) start_markup_btn1 = types.KeyboardButton('/start') start_markup.add(start_markup_btn1) source_markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True) source_markup_btn1 = types.KeyboardButton('') source_markup_btn2 = types.KeyboardButton(' ') source_markup.add(source_markup_btn1, source_markup_btn2) age_markup = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True) age_markup_btn1 = types.KeyboardButton('') age_markup_btn2 = types.KeyboardButton('') age_markup_btn3 = types.KeyboardButton('') age_markup.add(age_markup_btn1, age_markup_btn2, age_markup_btn3) rating_markup = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True) rating_markup_btn1 = types.KeyboardButton(' ') rating_markup_btn2 = types.KeyboardButton('10') rating_markup_btn3 = types.KeyboardButton('25') rating_markup_btn4 = types.KeyboardButton('50') rating_markup_btn5 = types.KeyboardButton('100') rating_markup.row(rating_markup_btn1, rating_markup_btn2) rating_markup.row(rating_markup_btn3, rating_markup_btn4, rating_markup_btn5) amount_markup = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True) amount_markup_btn1 = types.KeyboardButton('1') amount_markup_btn2 = types.KeyboardButton('3') amount_markup_btn3 = types.KeyboardButton('5') amount_markup.add(amount_markup_btn1, amount_markup_btn2, amount_markup_btn3)
bot.py
import telebot import bs4 from Task import Task import parser import markups as m
ãã£ãïŒ ååãšããŠã³ãŒããæ±ããŸããã çŸåšãæãéèŠãªããšã¯ããããã®å±éãHerokuã§ã¯ãªãããšã§ãã
Herokuã«ãããããããã€ããŸãã
æåã«
Herokuãš
Githubã«ç»é²ããå¿
èŠããããŸãã
githubã«ãªããžããªãäœæããŸãã
ïŒã¢ãã¿ãŒã®å·ŠåŽã«ãããã©ã¹èšå·ãã¯ãªãã¯ããŸãïŒããã§ãProcfileïŒWindowsçšã®Procfile.windowsïŒãå¿
èŠã§ãã äœæããŠ
bot: python3 bot.py
äœæãã
bot: python3 bot.py
bot.pyããTOKENãåé€ããŸãããã®ãã¡ã€ã«ã¯githubã«ã¢ããããŒããããããããã§ã¯å¿
èŠãããŸããã ãããã®èµ·åã«äœ¿çšããã®ãšåã端æ«ã䜿çšããŠãgithubã«ãã¡ã€ã«ãã¢ããããŒãããŸãã ïŒ__pycache__ãã©ã«ããŒãäºåã«åé€ããŸãïŒã
echo "# HabrParser_Bot" >> README.md git init git add . git add * git commit -m "Initial Commit" -a git remote add origin origin https://github.com/name/botname.git
Gitã¯ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®å
¥åãæ±ããèœã¡çããŠå
¥åããHerokaã«ããããå±éããŸãã ãã¹ãŠãåã端æ«ã§äœæããŠããŸãã
TOKENãbot.pyã«æ»ããŸãããã®ãã¡ã€ã«ã¯Herokaã«ã¢ããããŒããããããããã§å¿
èŠã«ãªããŸãã
heroku login # email heroku create
ãããããªãã«ããã«ã¯
heroku ps:stop bot
ãããŠãgithubã«ã¢ããããŒãããåã«å¿ããã«ãbot.pyããTOKENãåé€ããŠãã ããã çµå±ã®ãšããã誰ãããã䜿çšããå¿
èŠã¯ãããŸããã
ãã¡ããã.gitignoreã䜿çšããŠãããŒã¯ã³ãå¥ã®ãã¡ã€ã«ã«è»¢éã§ããŸããããã§ãšãããããŸãïŒ
äœæ¥ã¯çµäºãããããã¯ãªã¢ãŒãã§åäœããŸãã
åç
§è³æ
githubäžã®ãããã®æçµã³ãŒãããã管çAPIãããã€ã«ã€ããŠpipenvã«ã€ããŠçŽ æŽãããã¬ã€ãã誰ãã圹ã«ç«ã€ãããããŸãããããã«
誰ããèå³ãæã£ãŠããã°ãèšäºãæžããšããç®æšã¯éæãããŸãã 誰ãããããè€éãªãããïŒwebhookããŠãŒã¶ãŒèšå®ãå«ãæ¥ç¶ãããããŒã¿ããŒã¹ãªã©ïŒã«é¢ããèšäºãèŠããå Žåã¯ãæžããŠãã ããã
æŽæ°UPD1
- ã³ã³ãã³ãã«ã¢ã³ã«ãŒãè¿œå ããŸããã
- ã³ãŒããgithubãšherokaã«ã¢ããããŒãããããã®ã¢ã«ãŽãªãºã ãå€æŽããŸããã
- PyTelegramBotAPIã®ããŒãžã§ã³ã¯åé€ãããŸããã Herokuã¯ãæ°ããããŒãžã§ã³ã§ãæ£åžžã«åäœããããã«ãªããŸããã