pytelegrambotapi
Implementasi Python yang sederhana, tetapi dapat diperluas untuk API Bot Telegram.
Keduanya sinkron dan asinkron.
Versi API bot yang didukung: 7.1!
API ini diuji dengan Python 3.8-3.12 dan Pypy 3. Ada dua cara untuk menginstal perpustakaan:
$ pip install pyTelegramBotAPI
$ pip install git+https://github.com/eternnoir/pyTelegramBotAPI.git
Biasanya disarankan untuk menggunakan opsi pertama.
Meskipun API siap produksi, masih sedang dikembangkan dan memiliki pembaruan rutin, jangan lupa untuk memperbaruinya secara teratur dengan menelepon
pip install pytelegrambotapi --upgrade
Diperkirakan bahwa Anda telah memperoleh token API dengan @botfather. Kami akan menyebut token TOKEN ini. Selain itu, Anda memiliki pengetahuan dasar tentang bahasa pemrograman Python dan yang lebih penting adalah Telegram Bot API.
Kelas telebot (didefinisikan dalam __init__.py) merangkum semua panggilan API dalam satu kelas. Ini menyediakan fungsi seperti send_xyz ( send_message , send_document dll.) Dan beberapa cara untuk mendengarkan pesan yang masuk.
Buat file yang disebut echo_bot.py . Kemudian, buka file dan buat instance kelas telebot.
import telebot
bot = telebot . TeleBot ( "TOKEN" , parse_mode = None ) # You can set parse_mode by default. HTML or MARKDOWNCatatan: Pastikan untuk benar -benar mengganti token dengan token API Anda sendiri.
Setelah deklarasi itu, kita perlu mendaftarkan beberapa penangan pesan. Penangan pesan menentukan filter mana yang harus disampaikan pesan. Jika sebuah pesan melewati filter, fungsi yang didekorasi dipanggil dan pesan yang masuk dilewatkan sebagai argumen.
Mari kita tentukan pawang pesan yang menangani perintah yang masuk /start dan /help .
@ bot . message_handler ( commands = [ 'start' , 'help' ])
def send_welcome ( message ):
bot . reply_to ( message , "Howdy, how are you doing?" )Fungsi yang didekorasi oleh penangan pesan dapat memiliki nama yang sewenang -wenang, namun, ia hanya harus memiliki satu parameter (pesan) .
Mari tambahkan penangan lain:
@ bot . message_handler ( func = lambda m : True )
def echo_all ( message ):
bot . reply_to ( message , message . text )Yang ini menggemakan semua pesan teks yang masuk kembali ke pengirim. Ini menggunakan fungsi lambda untuk menguji pesan. Jika Lambda kembali benar, pesan tersebut ditangani oleh fungsi yang dihiasi. Karena kami ingin semua pesan ditangani oleh fungsi ini, kami selalu mengembalikan true.
Catatan: Semua penangan diuji dalam urutan di mana mereka dinyatakan
Kami sekarang memiliki bot dasar yang membalas pesan statis ke perintah "/start" dan "/help" dan yang menggemakan sisa pesan yang dikirim. Untuk memulai bot, tambahkan yang berikut ke file sumber kami:
bot . infinity_polling ()Baiklah, itu saja! File sumber kami sekarang terlihat seperti ini:
import telebot
bot = telebot . TeleBot ( "YOUR_BOT_TOKEN" )
@ bot . message_handler ( commands = [ 'start' , 'help' ])
def send_welcome ( message ):
bot . reply_to ( message , "Howdy, how are you doing?" )
@ bot . message_handler ( func = lambda message : True )
def echo_all ( message ):
bot . reply_to ( message , message . text )
bot . infinity_polling () Untuk memulai bot, cukup buka terminal dan masukkan python echo_bot.py untuk menjalankan bot! Uji dengan mengirim perintah ('/start' dan '/help') dan pesan teks sewenang -wenang.
Semua jenis didefinisikan dalam type.py. Mereka semua sepenuhnya sejalan dengan definisi Telegram API tentang jenis, kecuali untuk pesan from lapangan, yang diganti namanya menjadi from_user (karena from token yang dipesan oleh Python). Dengan demikian, atribut seperti message_id dapat diakses secara langsung dengan message.message_id . Perhatikan User message.chat GroupChat
Objek pesan juga memiliki atribut content_type , yang mendefinisikan jenis pesan. content_type dapat berupa salah satu string berikut: text , audio , document , animation , game , photo , sticker , video , video_note , voice , location , contact , venue , dice , new_chat_members , left_chat_member , new_chat_title , new_chat_photo , group_chate, delete_chat_photo , group_chat_created , helete_chate_chato, supergroup_chat_created channel_chat_created , migrate_to_chat_id , migrate_from_chat_id , pinned_message , invoice , successful_payment , connected_website , poll , passport_data , proximity_alert_triggered , video_chat_scheduled , video_chat_started , video_chat_ended , video_chat_participants_invited , web_app_data , message_auto_delete_timer_changed , forum_topic_created , forum_topic_closed, forum_topic_closed , forum_topic_reopened , user_shared , forum_topic_edited , writeces_caccess_topic_hidden, general_forum_topic_hidden , writeces_access_acaccess eyaccess_topic_allow, general_forum_topic_unhidden , write_access_allowed eyaccess _topic_allow, chat_shared , story .
Anda dapat menggunakan beberapa jenis dalam satu fungsi. Contoh:
content_types=["text", "sticker", "pinned_message", "photo", "audio"]
Semua metode API terletak di kelas Telebot. Mereka berganti nama untuk mengikuti konvensi penamaan Python yang umum. Misalnya getMe diganti namanya menjadi get_me dan sendMessage ke send_message .
Diuraikan di bawah ini adalah beberapa kasus penggunaan API umum.
Penangan pesan adalah fungsi yang dihiasi dengan dekorator message_handler dari contoh telebot. Penangan pesan terdiri dari satu atau beberapa filter. Setiap filter harus dikembalikan benar untuk pesan tertentu agar penangan pesan menjadi memenuhi syarat untuk menangani pesan itu. Penangan pesan dinyatakan dengan cara berikut (asalkan bot adalah contoh telebot):
@ bot . message_handler ( filters )
def function_name ( message ):
bot . reply_to ( message , "This is a message handler" ) function_name tidak terikat pada batasan apa pun. Nama fungsi apa pun diizinkan dengan penangan pesan. Fungsi harus menerima paling banyak satu argumen, yang akan menjadi pesan yang harus ditangani oleh fungsi. filters adalah daftar argumen kata kunci. Filter dinyatakan dengan cara berikut: name=argument . Satu penangan mungkin memiliki beberapa filter. Telebot mendukung filter berikut:
| nama | argumen | Kondisi |
|---|---|---|
| content_types | Daftar string (default ['text'] ) | True jika pesan.content_type ada dalam daftar string. |
| Regexp | ekspresi reguler sebagai string | True if re.search(regexp_arg) mengembalikan True dan message.content_type == 'text' (lihat Ekspresi Reguler Python) |
| perintah | Daftar string | True jika message.content_type == 'text' dan message.text dimulai dengan perintah yang ada dalam daftar string. |
| chat_types | Daftar Jenis Obrolan | True jika message.chat.type di filter Anda |
| func | fungsi (lambda atau referensi fungsi) | True jika lambda atau referensi fungsi mengembalikan True |
Berikut adalah beberapa contoh menggunakan filter dan penangan pesan:
import telebot
bot = telebot . TeleBot ( "TOKEN" )
# Handles all text messages that contains the commands '/start' or '/help'.
@ bot . message_handler ( commands = [ 'start' , 'help' ])
def handle_start_help ( message ):
pass
# Handles all sent documents and audio files
@ bot . message_handler ( content_types = [ 'document' , 'audio' ])
def handle_docs_audio ( message ):
pass
# Handles all text messages that match the regular expression
@ bot . message_handler ( regexp = "SOME_REGEXP" )
def handle_message ( message ):
pass
# Handles all messages for which the lambda returns True
@ bot . message_handler ( func = lambda message : message . document . mime_type == 'text/plain' , content_types = [ 'document' ])
def handle_text_doc ( message ):
pass
# Which could also be defined as:
def test_message ( message ):
return message . document . mime_type == 'text/plain'
@ bot . message_handler ( func = test_message , content_types = [ 'document' ])
def handle_text_doc ( message ):
pass
# Handlers can be stacked to create a function which will be called if either message_handler is eligible
# This handler will be called if the message starts with '/hello' OR is some emoji
@ bot . message_handler ( commands = [ 'hello' ])
@ bot . message_handler ( func = lambda msg : msg . text . encode ( "utf-8" ) == SOME_FANCY_EMOJI )
def send_something ( message ):
passPENTING: Semua penangan diuji dalam urutan di mana mereka dinyatakan
Menangani pesan yang diedit @bot.edited_message_handler(filters) # <- passes a Message type object to your function
Tangani Pesan Posting Saluran @bot.channel_post_handler(filters) # <- passes a Message type object to your function
Tangani Pesan Posting Saluran yang Diedit @bot.edited_channel_post_handler(filters) # <- passes a Message type object to your function
Tangani pertanyaan panggilan balik
@ bot . callback_query_handler ( func = lambda call : True )
def test_callback ( call ): # <- passes a CallbackQuery type object to your function
logger . info ( call ) Tangani kueri pengiriman @bot.shipping_query_handler() # <- passes a ShippingQuery type object to your function
Tangani kueri pra-centang @bot.pre_checkout_query_handler() # <- passes a PreCheckoutQuery type object to your function
Tangani Pembaruan Polling @bot.poll_handler() # <- passes a Poll type object to your function
Tangani Jawaban Polling @bot.poll_answer_handler() # <- passes a PollAnswer type object to your function
Tangani pembaruan status anggota bot dalam obrolan @bot.my_chat_member_handler() # <- passes a ChatMemberUpdated type object to your function
Tangani pembaruan status anggota obrolan di obrolan @bot.chat_member_handler() # <- passes a ChatMemberUpdated type object to your function Catatan: "chat_member" pembaruan tidak diminta secara default. Jika Anda ingin mengizinkan semua jenis pembaruan, setel allowed_updates di bot.polling() / bot.infinity_polling() ke util.update_types
Tangani Permintaan Bergabung Obrolan Menggunakan: @bot.chat_join_request_handler() # <- passes ChatInviteLink type object to your function
Informasi lebih lanjut tentang mode inline.
Sekarang, Anda dapat menggunakan Inline_Handler untuk mendapatkan kueri inline di Telebot.
@ bot . inline_handler ( lambda query : query . query == 'text' )
def query_text ( inline_query ):
# Query message is text Gunakan chosen_inline_handler untuk mendapatkan chosen_inline_result di telebot. Jangan lupa tambahkan perintah /setInlinefeedback untuk @botfather.
Informasi lebih lanjut: mengumpulkan umpan balik
@ bot . chosen_inline_handler ( func = lambda chosen_inline_result : True )
def test_chosen ( chosen_inline_result ):
# Process all chosen_inline_result. @ bot . inline_handler ( lambda query : query . query == 'text' )
def query_text ( inline_query ):
try :
r = types . InlineQueryResultArticle ( '1' , 'Result' , types . InputTextMessageContent ( 'Result message.' ))
r2 = types . InlineQueryResultArticle ( '2' , 'Result2' , types . InputTextMessageContent ( 'Result message2.' ))
bot . answer_inline_query ( inline_query . id , [ r , r2 ])
except Exception as e :
print ( e ) Handler middleware adalah fungsi yang memungkinkan Anda untuk memodifikasi permintaan atau konteks bot saat mereka melewati telegram ke bot. Anda dapat membayangkan middleware sebagai rantai koneksi logika yang ditangani sebelum penangan lain dieksekusi. Middleware Processing dinonaktifkan secara default, aktifkan dengan mengatur apihelper.ENABLE_MIDDLEWARE = True .
apihelper . ENABLE_MIDDLEWARE = True
@ bot . middleware_handler ( update_types = [ 'message' ])
def modify_message ( bot_instance , message ):
# modifying the message before it reaches any other handler
message . another_text = message . text + ':changed'
@ bot . message_handler ( commands = [ 'start' ])
def start ( message ):
# the message is already modified when it reaches message handler
assert message . another_text == message . text + ':changed'Ada contoh lain menggunakan middleware handler di Direktori Contoh/Middleware.
Ada pertengahan kelas berbasis kelas. Middleware berbasis kelas dasar terlihat seperti ini:
class Middleware ( BaseMiddleware ):
def __init__ ( self ):
self . update_types = [ 'message' ]
def pre_process ( self , message , data ):
data [ 'foo' ] = 'Hello' # just for example
# we edited the data. now, this data is passed to handler.
# return SkipHandler() -> this will skip handler
# return CancelUpdate() -> this will cancel update
def post_process ( self , message , data , exception = None ):
print ( data [ 'foo' ])
if exception : # check for exception
print ( exception )Middleware berbasis kelas harus memiliki dua fungsi: Proses Posting dan Pra. Jadi, seperti yang Anda lihat, tiddwares berbasis kelas bekerja sebelum dan sesudah eksekusi penangan. Untuk lebih lanjut, lihat contoh
Anda juga dapat menggunakan filter kustom bawaan. Atau, Anda dapat membuat filter Anda sendiri.
Contoh filter khusus juga, kami memiliki contoh di dalamnya. Periksa tautan ini: Anda dapat memeriksa beberapa filter built-in dalam contoh kode sumber dari penyaringan dengan ID contoh pemfilteran melalui teks jika Anda ingin menambahkan beberapa filter bawaan, Anda dipersilakan untuk menambahkannya di file custom_filters.py. Berikut adalah contoh membuat kelas filter:
class IsAdmin ( telebot . custom_filters . SimpleCustomFilter ):
# Class will check whether the user is admin or creator in group or not
key = 'is_chat_admin'
@ staticmethod
def check ( message : telebot . types . Message ):
return bot . get_chat_member ( message . chat . id , message . from_user . id ). status in [ 'administrator' , 'creator' ]
# To register filter, you need to use method add_custom_filter.
bot . add_custom_filter ( IsAdmin ())
# Now, you can use it in handler.
@ bot . message_handler ( is_chat_admin = True )
def admin_of_group ( message ):
bot . send_message ( message . chat . id , 'You are admin of this group!' ) import telebot
TOKEN = '<token_string>'
tb = telebot . TeleBot ( TOKEN ) #create a new Telegram Bot object
# Upon calling this function, TeleBot starts polling the Telegram servers for new messages.
# - interval: int (default 0) - The interval between polling requests
# - timeout: integer (default 20) - Timeout in seconds for long polling.
# - allowed_updates: List of Strings (default None) - List of update types to request
tb . infinity_polling ( interval = 0 , timeout = 20 )
# getMe
user = tb . get_me ()
# setWebhook
tb . set_webhook ( url = "http://example.com" , certificate = open ( 'mycert.pem' ))
# unset webhook
tb . remove_webhook ()
# getUpdates
updates = tb . get_updates ()
# or
updates = tb . get_updates ( 1234 , 100 , 20 ) #get_Updates(offset, limit, timeout):
# sendMessage
tb . send_message ( chat_id , text )
# editMessageText
tb . edit_message_text ( new_text , chat_id , message_id )
# forwardMessage
tb . forward_message ( to_chat_id , from_chat_id , message_id )
# All send_xyz functions which can take a file as an argument, can also take a file_id instead of a file.
# sendPhoto
photo = open ( '/tmp/photo.png' , 'rb' )
tb . send_photo ( chat_id , photo )
tb . send_photo ( chat_id , "FILEID" )
# sendAudio
audio = open ( '/tmp/audio.mp3' , 'rb' )
tb . send_audio ( chat_id , audio )
tb . send_audio ( chat_id , "FILEID" )
## sendAudio with duration, performer and title.
tb . send_audio ( CHAT_ID , file_data , 1 , 'eternnoir' , 'pyTelegram' )
# sendVoice
voice = open ( '/tmp/voice.ogg' , 'rb' )
tb . send_voice ( chat_id , voice )
tb . send_voice ( chat_id , "FILEID" )
# sendDocument
doc = open ( '/tmp/file.txt' , 'rb' )
tb . send_document ( chat_id , doc )
tb . send_document ( chat_id , "FILEID" )
# sendSticker
sti = open ( '/tmp/sti.webp' , 'rb' )
tb . send_sticker ( chat_id , sti )
tb . send_sticker ( chat_id , "FILEID" )
# sendVideo
video = open ( '/tmp/video.mp4' , 'rb' )
tb . send_video ( chat_id , video )
tb . send_video ( chat_id , "FILEID" )
# sendVideoNote
videonote = open ( '/tmp/videonote.mp4' , 'rb' )
tb . send_video_note ( chat_id , videonote )
tb . send_video_note ( chat_id , "FILEID" )
# sendLocation
tb . send_location ( chat_id , lat , lon )
# sendChatAction
# action_string can be one of the following strings: 'typing', 'upload_photo', 'record_video', 'upload_video',
# 'record_audio', 'upload_audio', 'upload_document' or 'find_location'.
tb . send_chat_action ( chat_id , action_string )
# getFile
# Downloading a file is straightforward
# Returns a File object
import requests
file_info = tb . get_file ( file_id )
file = requests . get ( 'https://api.telegram.org/file/bot{0}/{1}' . format ( API_TOKEN , file_info . file_path ))
Semua fungsi send_xyz dari telebot mengambil argumen reply_markup opsional. Argumen ini harus merupakan contoh dari ReplyKeyboardMarkup , ReplyKeyboardRemove atau ForceReply , yang didefinisikan dalam type.py.
from telebot import types
# Using the ReplyKeyboardMarkup class
# It's constructor can take the following optional arguments:
# - resize_keyboard: True/False (default False)
# - one_time_keyboard: True/False (default False)
# - selective: True/False (default False)
# - row_width: integer (default 3)
# row_width is used in combination with the add() function.
# It defines how many buttons are fit on each row before continuing on the next row.
markup = types . ReplyKeyboardMarkup ( row_width = 2 )
itembtn1 = types . KeyboardButton ( 'a' )
itembtn2 = types . KeyboardButton ( 'v' )
itembtn3 = types . KeyboardButton ( 'd' )
markup . add ( itembtn1 , itembtn2 , itembtn3 )
tb . send_message ( chat_id , "Choose one letter:" , reply_markup = markup )
# or add KeyboardButton one row at a time:
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 )
tb . send_message ( chat_id , "Choose one letter:" , reply_markup = markup )Contoh terakhir menghasilkan hasil ini:
# ReplyKeyboardRemove: hides a previously sent ReplyKeyboardMarkup
# Takes an optional selective argument (True/False, default False)
markup = types . ReplyKeyboardRemove ( selective = False )
tb . send_message ( chat_id , message , reply_markup = markup ) # ForceReply: forces a user to reply to a message
# Takes an optional selective argument (True/False, default False)
markup = types . ForceReply ( selective = False )
tb . send_message ( chat_id , "Send me another word:" , reply_markup = markup )FORCEREPEN:
Objek ini mewakili satu entitas khusus dalam pesan teks. Misalnya, tagar, nama pengguna, URL, dll. Atribut:
typeurloffsetlengthuser Inilah contohnya: message.entities[num].<attribute>
Di sini num adalah nomor entitas atau urutan entitas dalam balasan, karena jika jika ada beberapa entitas dalam balasan/pesan.
message.entities Mengembalikan daftar objek entitas.
message.entities[0].type akan memberikan jenis entitas pertama
Rujuk Bot API untuk detail tambahan
Karena versi 5.0 dari BOT API, Anda memiliki kemungkinan untuk menjalankan server API bot lokal Anda sendiri. Pytelegrambotapi juga mendukung fitur ini.
from telebot import apihelper
apihelper . API_URL = "http://localhost:4200/bot{0}/{1}" PENTING: Seperti yang dijelaskan di sini, Anda harus keluar bot Anda dari server telegram sebelum beralih ke server API lokal Anda. di pytelegrambotapi gunakan bot.log_out()
Catatan: 4200 adalah contoh port
Baru: Ada implementasi telebot yang tidak sinkron. Untuk mengaktifkan perilaku ini, buat contoh asynctelebot bukan telebot.
tb = telebot . AsyncTeleBot ( "TOKEN" )Sekarang, setiap fungsi yang menyebut API telegram dieksekusi dalam tugas asinkron terpisah. Menggunakan asynctelebot memungkinkan Anda melakukan hal berikut:
import telebot
tb = telebot . AsyncTeleBot ( "TOKEN" )
@ tb . message_handler ( commands = [ 'start' ])
async def start_message ( message ):
await bot . send_message ( message . chat . id , 'Hello!' )Lihat lebih banyak contoh
Terkadang Anda harus mengirim pesan yang melebihi 5000 karakter. API Telegram tidak dapat menangani banyak karakter dalam satu permintaan, jadi kita perlu membagi pesan dalam kelipatan. Inilah cara melakukannya dengan menggunakan API:
from telebot import util
large_text = open ( "large_text.txt" , "rb" ). read ()
# Split the text each 3000 characters.
# split_string returns a list with the splitted text.
splitted_text = util . split_string ( large_text , 3000 )
for text in splitted_text :
tb . send_message ( chat_id , text ) Atau Anda dapat menggunakan fungsi smart_split baru untuk mendapatkan substring yang lebih bermakna:
from telebot import util
large_text = open ( "large_text.txt" , "rb" ). read ()
# Splits one string into multiple strings, with a maximum amount of `chars_per_string` (max. 4096)
# Splits by last 'n', '. ' or ' ' in exactly this priority.
# smart_split returns a list with the splitted text.
splitted_text = util . smart_split ( large_text , chars_per_string = 3000 )
for text in splitted_text :
tb . send_message ( chat_id , text )Konstruktor Telebot mengambil argumen opsional berikut:
Sebagai alternatif untuk penangan pesan, orang juga dapat mendaftarkan fungsi sebagai pendengar Telebot.
Perhatikan: Penangan tidak akan hilang! Pesan Anda akan diproses oleh penangan dan pendengar. Juga, tidak mungkin untuk memprediksi mana yang akan bekerja pada awalnya karena threading. Jika Anda menggunakan threaded = false, pendengar khusus akan bekerja lebih awal, setelah mereka penangan akan dipanggil. Contoh:
def handle_messages ( messages ):
for message in messages :
# Do something with the message
bot . reply_to ( message , 'Hi' )
bot . set_update_listener ( handle_messages )
bot . infinity_polling ()Saat menggunakan WebHooks Telegram, mengirim satu pembaruan per panggilan, untuk memprosesnya, Anda harus menelepon proses_new_messages ([update.message]) saat Anda menerimanya.
Ada beberapa contoh menggunakan webhook di Direktori Contoh/WebHook_Examples.
Anda dapat menggunakan Logger Modul Telebot untuk mencatat info debug tentang Telebot. Gunakan telebot.logger untuk mendapatkan logger modul telebot. Dimungkinkan untuk menambahkan penangan logging khusus ke logger. Lihat halaman Modul Pencatatan Python untuk info lebih lanjut.
import logging
logger = telebot . logger
telebot . logger . setLevel ( logging . DEBUG ) # Outputs debug messages to console.Untuk sinkronisasi:
Anda dapat menggunakan proxy untuk permintaan. objek apihelper.proxy akan digunakan dengan requests proxy permintaan argumen.
from telebot import apihelper
apihelper . proxy = { 'http' : 'http://127.0.0.1:3128' } Jika Anda ingin menggunakan proxy Socket5, Anda perlu menginstal pip install requests[socks] dan memastikan, bahwa Anda memiliki versi terbaru dari gunicorn , PySocks , pyTelegramBotAPI , requests dan urllib3 .
apihelper . proxy = { 'https' : 'socks5://userproxy:password@proxy_address:port' }Untuk async:
from telebot import asyncio_helper
asyncio_helper . proxy = 'http://127.0.0.1:3128' #urlAnda dapat menonaktifkan atau mengubah interaksi dengan server telegram nyata dengan menggunakan
apihelper . CUSTOM_REQUEST_SENDER = your_handlerparameter. Anda dapat melewati fungsi Anda sendiri yang akan dipanggil alih -alih permintaan .
Misalnya:
def custom_sender ( method , url , ** kwargs ):
print ( "custom_sender. method: {}, url: {}, params: {}" . format ( method , url , kwargs . get ( "params" )))
result = util . CustomRequestResponse ( '{"ok":true,"result":{"message_id": 1, "date": 1, "chat": {"id": 1, "type": "private"}}}' )
return resultKemudian Anda dapat menggunakan API dan melanjutkan permintaan dalam kode penangan Anda.
apihelper . CUSTOM_REQUEST_SENDER = custom_sender
tb = TeleBot ( "test" )
res = tb . send_message ( 123 , "Test" )Hasilnya adalah:
custom_sender. method: post, url: https://api.telegram.org/botololo/sendMessage, params: {'chat_id': '123', 'text': 'Test'}
Kami memiliki versi telebot yang sepenuhnya asinkron. Kelas ini tidak dikendalikan oleh utas. Tugas Asyncio dibuat untuk mengeksekusi semua barang.
Contoh echo bot pada asynctelebot:
# This is a simple echo bot using the decorator mechanism.
# It echoes any incoming text messages.
from telebot . async_telebot import AsyncTeleBot
import asyncio
bot = AsyncTeleBot ( 'TOKEN' )
# Handle '/start' and '/help'
@ bot . message_handler ( commands = [ 'help' , 'start' ])
async def send_welcome ( message ):
await bot . reply_to ( message , """
Hi there, I am EchoBot.
I am here to echo your kind words back to you. Just say anything nice and I'll say the exact same thing to you!
""" )
# Handle all other messages with content_type 'text' (content_types defaults to ['text'])
@ bot . message_handler ( func = lambda message : True )
async def echo_message ( message ):
await bot . reply_to ( message , message . text )
asyncio . run ( bot . polling ())Seperti yang dapat Anda lihat di sini, kata kunci adalah menunggu dan async.
Tugas asinkron tergantung pada kinerja prosesor. Banyak tugas asinkron dapat berjalan paraleli, sementara tugas utas akan saling memblokir.
Asynctelebot asinkron. Ini menggunakan AIOHTTP alih -alih Modul Permintaan.
Lihat lebih banyak contoh di folder contoh kami
Telegram bot API mendukung obrolan tipe baru untuk pesan.chat.
type di Objek Chat : if message . chat . type == "private" :
# private chat message
if message . chat . type == "group" :
# group chat message
if message . chat . type == "supergroup" :
# supergroup chat message
if message . chat . type == "channel" :
# channel message Bot instance yang menganggur untuk waktu yang lama mungkin ditolak oleh server saat mengirim pesan karena batas waktu sesi yang digunakan terakhir. Tambahkan apihelper.SESSION_TIME_TO_LIVE = 5 * 60 ke inisialisasi Anda untuk memaksa rekreasi setelah 5 menit tanpa aktivitas apa pun.
Dapatkan bantuan. Membahas. Mengobrol.
Bergabunglah dengan saluran berita. Di sini kami akan memposting rilis dan pembaruan.
Template adalah folder siap yang berisi arsitektur proyek dasar. Berikut adalah beberapa contoh template:
Ingin mendapatkan bot Anda terdaftar di sini? Buat saja permintaan tarik. Hanya bot dengan kode sumber publik yang diterima.