قصد دارم پروژه نرخ ارز رو به ربات تلگرام وصل کنم. ولی یک موضوعی که هست اینه که در کمال تعجب، منبع درست یادگیری براش پیدا نکردم. از داکیومنت اصلیش هم خیلی سر در نیاوردم.
چیزی که متوجه شدم اینه که بعضیها برنامهنویسها با یک پکیج به اسم python-telegram-bot اینکار رو انجام میدن و بعضی دیگر بدون استفاده از این پکیج و به صورت مستقیم به ربات وصل میشن.
۳ تا سوال دارم.
و در نهایت این تکه کدی هست که من دیدم بدون استفاده از پکیج python-telegram-bot نوشته شده
# -*- coding: UTF8 -*-
import requests
import datetime
class BotHandler:
def __init__(self, token):
self.token = token
self.api_url = "https://api.telegram.org/bot{}/".format(token)
#url = "https://api.telegram.org/bot<token>/"
def get_updates(self, offset=0, timeout=30):
method = 'getUpdates'
params = {'timeout': timeout, 'offset': offset}
resp = requests.get(self.api_url + method, params)
result_json = resp.json()['result']
return result_json
def send_message(self, chat_id, text):
params = {'chat_id': chat_id, 'text': text, 'parse_mode': 'HTML'}
method = 'sendMessage'
resp = requests.post(self.api_url + method, params)
return resp
def get_first_update(self):
get_result = self.get_updates()
if len(get_result) > 0:
last_update = get_result[0]
else:
last_update = None
return last_update
token = 'YourToken' #Token of your bot
magnito_bot = BotHandler(token) #Your bot's name
def main():
new_offset = 0
print('hi, now launching...')
while True:
all_updates=magnito_bot.get_updates(new_offset)
if len(all_updates) > 0:
for current_update in all_updates:
print(current_update)
first_update_id = current_update['update_id']
if 'text' not in current_update['message']:
first_chat_text='New member'
else:
first_chat_text = current_update['message']['text']
first_chat_id = current_update['message']['chat']['id']
if 'first_name' in current_update['message']:
first_chat_name = current_update['message']['chat']['first_name']
elif 'new_chat_member' in current_update['message']:
first_chat_name = current_update['message']['new_chat_member']['username']
elif 'from' in current_update['message']:
first_chat_name = current_update['message']['from']['first_name']
else:
first_chat_name = "unknown"
if first_chat_text == 'Hi':
magnito_bot.send_message(first_chat_id, 'Morning ' + first_chat_name)
new_offset = first_update_id + 1
else:
magnito_bot.send_message(first_chat_id, 'How are you doing '+first_chat_name)
new_offset = first_update_id + 1
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
exit()
سلااااااااااااااااااااام، واقعا عجیبه که منبع خوب گیر نیوردی و غیرقابل باور
من سرچ کردم:
how to create telegram bot using python
و ۴ تا سایت اول بنظرم محتوا خوبی داشتن:
https://khashtamov.com/en/how-to-create-a-telegram-bot-using-python/
https://djangostars.com/blog/how-to-create-and-deploy-a-telegram-bot/
https://www.toptal.com/python/telegram-bot-tutorial-python
داکیومنت python-telegram-bot رو هم نگاه کردم. داکومنتش حالت Reference داره و اومده کلاس ها و متدها و اجزا دیگه پکیج رو توضیح داده. اما نکته اینه که بنظرم از ۲ تا عنوان اولش:
سریع رد شدی. زیر عنوان اول یه لینک تو متن وجود داره که آموزش خوبی داده:
البته از logger هم دیدم استفاده کرده که شما نیاز نیست استفاده کنی. بعدا تو سرفصل crawler مبحث logger رو یادمیگیرید.
جواب سوال ۱) اگر این موضوعات و مفاهیم رو بلد باشی راحتتر میتونی با پکیج ربات بنویسی:
Telegram has two mutually exclusive API communication approaches:
پس تلگرام ۲ تا راه ارتباطی API داره که اولی یه تابع است که باید کارش رو یادبگیری و دومی یه مفهومه ساده است.
جواب سوال ۲) اون چهار تا سایتی که ساختن ربات تلگرام رو یاد دادن سورس خوبی دارن. اون پیکجی هم که معرفی کردی یه مثال و ریپو کامل داره:
https://github.com/python-telegram-bot/python-telegram-bot/tree/master/examples
جواب سوال ۳) من پیکج های مختلف رو نگاه نکردم ولی واضحه که این تفاوت ها رو دارن:
using API call getUpdates
setting up a Webhook
و این کدی که گذاشتی رو من کامل میفهمم و برای فهمیدنش این پیشنیازها رو لازم داری:
امیدوارم تونسته باشم کمکت کنم. باز اگر سوالی داشتی تو همین تاپیک بپرس.