Konuyu Oyla:
  • Toplam: 1 Oy - Ortalama: 5
  • 1
  • 2
  • 3
  • 4
  • 5
[YENİ] Heroku ile telegram botu
#1
Merhaba,

Direk dalıyorum konuya Smile

Bildiğiniz üzere çok kullanışlı mesajlaşma programı telegramın ve uygulamanın bot menüsünde çok güzel botlar yapabilirsiniz.

Telegram uygulaması üzerinden bot kurulumunu yapıp tokeni aldıktan sonra botu çalıştırmak için server a ihtiyaç var.Bunun için heroku.com da bedava hesap açıp botunuzu ücretsiz çalıştırabilirsiniz. Heroku verdiği serverları webapp kurmamız için ayarlamış ve aylık belli çalışma saatleri var. 

Bunun için server boşta kaldığı sürelerde uykuya dalması lazım ki verdiği bedava süre hemen bitmesin.

Aşağıdaki github reposunda paylaştığım kurulumu kendinize göre düzenleyip heroku hesabınıza entegre edip kullanabilirsiniz. Konuyla ilgilenen kişiler konu altında sorunlarını paylaşırsa yardımcı olmaya çalışırız.

https://github.com/metin02oktay/Heroku-telepot-webhoook

Github sayfasında heroku ile ilgili ayarlama dosyaları var önemli kısım kullanacağımız python scripti. Python3 kullanıyorum isteyen python2 kurulumuda yapabilir, heroku python2 yi hala destekliyor Smile  runtime.txt içine "python-2.7.17" yazmanız yeterli 

# -*- coding: utf-8 -*-
# !/usr/bin/env python3

from flask import Flask, request
import telepot.namedtuple
from telepot.loop import OrderedWebhook
import requests

#ne eklemek isterseniz eğer kurulu değil ise requirements.txt satır olarak ekleyin youtube-dl,mechanize,bs4,....


TOKEN='TELEGRAM-TOKEN'
def selam():
   bot.sendMessage(chat_id,"iyiyim, sen nasılsın \xF0\x9F\x98\x8C ",parse_mode='Markdown')
   

def handle(msg):
   global chat_id
   content_type, chat_type, chat_id, msg_date, msg_id = telepot.glance(msg, long=True)
   m = telepot.namedtuple.Message(**msg)
   #print (msg)
   if (m.chat[4]==None) and (m.chat[5]==None):
       user = (m.chat[3])
   elif m.chat[5]==None:
       user = m.chat[4]
   else:
       user = (m.chat[4]+" "+m.chat[5])
   
   if (("text" in msg) !=  True):
       bot.sendMessage(chat_id, f'Hahaha gönderdiğin emoji çok komik \xF0\x9F\x98\x82 *{user}*\n',parse_mode='Markdown',reply_to_message_id=msg_id)
       
   elif msg['text'] == "nasılsın?":
       selam()
   else:
       #gelen metin mesajı: msg['text']  onu geri gönderelim,
       bot.sendMessage(chat_id, msg['text'],parse_mode='Markdown',disable_web_page_preview=True)

   
print ('Bot Aktif ...')
PORT = int(os.environ.get('PORT', 8443))                      
app = Flask(__name__, static_url_path = "", static_folder = "./") #static folder, resim,dosya vs flask ile açmak için                        
bot = telepot.Bot(TOKEN)
webhook=OrderedWebhook(bot, {'chat': handle})

@app.route('/', methods=['GET'])
def index():
   #ana sayfaya botun telegram linkini ekleyebilirsiniz
   return "<p>Merhaba, bu bir telegram botu</p><p><a href='https://t.me/......'>Botu baslat</a></p>"

@app.route('/videolar', methods=['GET', 'POST'])
def index3():
   #https://APPNAME.herokuapps.com/videolar?isim=video1&tur=mp4
   isim=str(request.args.get("isim"))  #video1 dönderir
   tur=str(request.args.get("tur"))   #mp4 dönderir
   return "video sayfasi"
 
@app.route("/webhook", methods=['GET', 'POST'])
def pass_update():
   webhook.feed(request.data)
   return 'OK'
if __name__ == '__main__':
   try:
       bot.setWebhook("https://APPNAME.herokuapp.com/webhook") #APPNAME yazan yere heroku da kurduğunuz makinanın ismini verin, telegramla iletişim için
   # Sometimes it would raise this error, but webhook still set successfully.
   except telepot.exception.TooManyRequestsError:
       pass
   webhook.run_as_thread()
   app.run(host='0.0.0.0',port=PORT, debug=True)


- Temel düzeydeki kod bu şekilde. TOKEN kısmına telegram Botfather kanalında kurduğumuz botun Api Token yapıştırıyoruz. 
- Detaylı bilgi: https://qpython.club/konu-telegram-bot-example.html teşekkürler gecemor
- Heroku.com üzerinde yeni makina kurduğumuzda isim vermenizi isteyecek, onu da APPNAME yazan yerlere eklemeyi unutmayın.



Şimdi benim paylaştığım bu temel script  flask ve telepot ile ilgili değişik senaryolar internette var. Telepot kütüphanesi çok güzel ve basit, examples klasörünü incelmenizi tavsiye ederim. Telegramın güzel nimetlerini bot yoluyla yapmak kolaylaşıyor. Yüksek boyutta dosya gönderme, seçenekli cevaplar, grup içerisinde bot kullanımı baya güzel nimetleri kullandırıyor Smile

Bide flask var tabi, heroku serveri ile telegram arasındaki iletişimini sağlıyor. Servere uykudayken bota bir mesaj geldiğinde telegram mesajı /webhook sayfasına iletir ve server çalışmaya başlar. Onun için ilk mesaj geldiğinde 3 saniyelik geç cevap gelir sonra şıkır şıkır cevaplar Smile

- Dediğim gibi soru olursa elimizden geldiğince tecrübeli kişilerle beraber yardımcı olmak isteriz.
Kolay gelsin Smile
Ara
Cevapla
#2
Öncelikle konu için teşekkürler, gerçekten telegram botu yapmak isteyip de sunucu sıkıntısı çekenler için çok güzel bir alternatif olacağına eminim Smile Ben daha önce google app engine için bir örnek çalışma vermiştim, ama onda sadece flask ile web server konusunda bir örnek hazırlamıştım. Bu konu ile hem google app engine için bir alternatif olan heroku 'yu tanıma hem de server sıkıntısı çekenler için telegram bot yapma fırsatı yakalamış oluyoruz, eline sağlık...

O zaman ilk soru benden gelsin, app engine ile cron job ayarlama fırsatımız oluyordu, peki bunda da cron ayarlayabiliyor muyuz? Bir de herokunun günlük veya aylık kullanım sınırları nedir; data transfer boyutu, disk kapasitesi vs...
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#3
Heroku Free hesabı için verdiği özellikler

512mb ram 1web/worker
550 saat açık kalma + 5 app
Hesabı onaylarsaniz 1000 saat + 100 app
30 dk bekleme süresi sonra uykuya geçer
Domain ekleme
postgres database hobby hesabı 5 ya da 10mb sanırım
En fazla 300mb uygulamanın boyutu olabilir.

Diğer limitler
Network Bandwidth: 2TB/month - Soft
Shared DB processing: Max 200msec per second CPU time - Soft
Dyno RAM usage: Determined by Dyno type - Hard
Slug Size: 500MB - Hard
Request Length: 30 seconds - Hard
python ve javascript dünyada en çok yazılan iki dil.
c kadar hızlı python kadar syntaxı kolay olan julia da geleceğin dilleri arasında..
Ara
Cevapla
#4
https://devcenter.heroku.com/articles/sc...the-add-on


Burada bir ek özellik var, daha önce kullanmadığım için bişey diyemiyorum Sad

şimdi baktım basitmiş Big GrinBig Grin

Şimdi hocam ads-on da heroku yazıyorsun, sonra yukarıdaki app çıkıyor, onu ekleyince yanında ok il link var basınca ayarlamalar geliyor, orada free olduğu için min 10dk seçiyorsun sonra komutu giriyorsun Big Grin

dashboard  ta Overview sekmesinde Configure Add-ons seçeneği var oraya basın, arama kısmına heroku yazınca "Heroku Scheduler"
 seçin sonra free olanı seçin ve ekleyin, sonra eklenen özeliklerde gözükecek üstüne basınca yeni bir sayfada özellikleri gelecek. Süreyi ayarlayın sonrada girmek istediğiniz komutu girin. Mesela "python file.py" gibi


Benim tahminim böyle
Ara
Cevapla
#5
@ahgonlum redis ile 30mb veriyor galiba. 

Kod:
import os
import redis

r = redis.from_url(os.environ.get("REDIS_URL"))


tek sıkıntısı sadece sözlük gibi dosya kayıt ediyor olmamız.
Ara
Cevapla
#6
(03-01-2020, Saat: 23:30)ahgonlum Nickli Kullanıcıdan Alıntı:  Heroku Free hesabı için verdiği özellikler

512mb ram 1web/worker
550 saat açık kalma + 5 app
Hesabı onaylarsaniz 1000 saat + 100 app
30 dk bekleme süresi sonra uykuya geçer
Domain ekleme
postgres database hobby hesabı 5 ya da 10mb sanırım
En fazla 300mb uygulamanın boyutu olabilir.

Diğer limitler
Network Bandwidth: 2TB/month - Soft
Shared DB processing: Max 200msec per second CPU time - Soft
Dyno RAM usage: Determined by Dyno type - Hard
Slug Size: 500MB - Hard
Request Length: 30 seconds - Hard


2TB Bandwidth oha2 valla süper, şu an digital ocean en düşük vps bile 1 tb 

Ayrıca onaylatınca 1000 saat 1 aydan da fazla yapıyor, o zaman bütün uygulamaların toplam saati sanırım bu.


(03-01-2020, Saat: 23:42)oktay811 Nickli Kullanıcıdan Alıntı:  https://devcenter.heroku.com/articles/sc...the-add-on


Burada bir ek özellik var, daha önce kullanmadığım için bişey diyemiyorum Sad

şimdi baktım basitmiş Big GrinBig Grin

Şimdi hocam ads-on da heroku yazıyorsun, sonra yukarıdaki app çıkıyor, onu ekleyince yanında ok il link var basınca ayarlamalar geliyor, orada free olduğu için min 10dk seçiyorsun sonra komutu giriyorsun Big Grin

dashboard  ta Overview sekmesinde Configure Add-ons seçeneği var oraya basın, arama kısmına heroku yazınca "Heroku Scheduler"
 seçin sonra free olanı seçin ve ekleyin, sonra eklenen özeliklerde gözükecek üstüne basınca yeni bir sayfada özellikleri gelecek. Süreyi ayarlayın sonrada girmek istediğiniz komutu girin. Mesela "python file.py" gibi


Benim tahminim böyle


Ohoo şu an bizim hosting bile minimum 15 dakika cron zamanlaması, bir de para veriyoruz düşün. 


(04-01-2020, Saat: 00:21)oktay811 Nickli Kullanıcıdan Alıntı:  @ahgonlum redis ile 30mb veriyor galiba. 

Kod:
import os
import redis

r = redis.from_url(os.environ.get("REDIS_URL"))


tek sıkıntısı sadece sözlük gibi dosya kayıt ediyor olmamız.


Yani Json formatında kaydediyor, ee güzel işte o da baya iş görür. postgres database tabi daha kapsamlı bir kayıt imkanı sunar ama redis de iyi bence.


Bilgiler için teşşekkürler ikinize de. Valla çok iyi özellikleri varmış, özellikle 2 TB bandwidth bilgisi beni benden aldı Smile Herokuyu değerlendirmek lazım o zaman.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#7
2Tb soft olarak yazıyor yani diyelim 2Tb i doldurdun direk internet kesilmiyor devam edebilirsin bu konuda esnek davranıyorlar.
python ve javascript dünyada en çok yazılan iki dil.
c kadar hızlı python kadar syntaxı kolay olan julia da geleceğin dilleri arasında..
Ara
Cevapla
#8
teşekkürler . Heroku olması çok iyi çünkü bizim internet yavaş
Ara
Cevapla
#9
Güzel konu
Ara
Cevapla
#10
super konu tesekkurer
Ara
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  telegram bot yapma yardım html rapidleech aras5757 1 875 30-07-2019, Saat: 17:45
Son Yorum: gecemor
  Telegram Bot Example gecemor 3 1,428 15-06-2019, Saat: 22:22
Son Yorum: gecemor

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme