kernelbot 0.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kernelbot-0.0.2/LICENSE +21 -0
- kernelbot-0.0.2/PKG-INFO +293 -0
- kernelbot-0.0.2/README.md +268 -0
- kernelbot-0.0.2/kernelbot/__init__.py +13 -0
- kernelbot-0.0.2/kernelbot/apihelper.py +131 -0
- kernelbot-0.0.2/kernelbot/bot.py +237 -0
- kernelbot-0.0.2/kernelbot/types.py +85 -0
- kernelbot-0.0.2/kernelbot/util.py +27 -0
- kernelbot-0.0.2/kernelbot/version.py +1 -0
- kernelbot-0.0.2/kernelbot.egg-info/PKG-INFO +293 -0
- kernelbot-0.0.2/kernelbot.egg-info/SOURCES.txt +15 -0
- kernelbot-0.0.2/kernelbot.egg-info/dependency_links.txt +1 -0
- kernelbot-0.0.2/kernelbot.egg-info/requires.txt +1 -0
- kernelbot-0.0.2/kernelbot.egg-info/top_level.txt +1 -0
- kernelbot-0.0.2/pyproject.toml +35 -0
- kernelbot-0.0.2/setup.cfg +4 -0
- kernelbot-0.0.2/tests/test_apihelper.py +17 -0
kernelbot-0.0.2/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ReaalRick
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
kernelbot-0.0.2/PKG-INFO
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kernelbot
|
|
3
|
+
Version: 0.0.2
|
|
4
|
+
Summary: A simple, but extensible Python implementation for the KernelGram Bot API. Telebot-compatible.
|
|
5
|
+
Author-email: ReaalRick <rickReaal@proton.me>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/ReaalRick/kernelbot
|
|
8
|
+
Project-URL: Repository, https://github.com/ReaalRick/kernelbot
|
|
9
|
+
Project-URL: Issues, https://github.com/ReaalRick/kernelbot/issues
|
|
10
|
+
Keywords: kernelgram,bot,api,telebot
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Requires-Python: >=3.8
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: requests>=2.28.0
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# kernelbot
|
|
27
|
+
|
|
28
|
+
Простая, но расширяемая реализация **KernelGram Bot API** на Python.
|
|
29
|
+
|
|
30
|
+
[](https://pypi.org/project/kernelbot/)
|
|
31
|
+
[](https://www.python.org/)
|
|
32
|
+
[](LICENSE)
|
|
33
|
+
[](https://kernelgram.club)
|
|
34
|
+
|
|
35
|
+
`kernelbot` — это замена [`pyTelegramBotAPI`](https://github.com/eternnoir/pyTelegramBotAPI) (telebot), адаптированная для [KernelGram](https://kernelgram.club) — мессенджера по типу телеграма но со своим сервером. Если у вас есть код под `telebot`, достаточно поменять импорт — и он заработает.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Содержание
|
|
40
|
+
|
|
41
|
+
- [Официальная документация](#официальная-документация)
|
|
42
|
+
- [Установка](#установка)
|
|
43
|
+
- [Первый бот](#первый-бот)
|
|
44
|
+
- [Что нужно](#что-нужно)
|
|
45
|
+
- [Простой эхо-бот](#простой-эхо-бот)
|
|
46
|
+
- [Общая документация API](#общая-документация-api)
|
|
47
|
+
- [Типы](#типы)
|
|
48
|
+
- [Методы](#методы)
|
|
49
|
+
- [Обработчики сообщений](#обработчики-сообщений)
|
|
50
|
+
- [Обработчики callback-запросов](#обработчики-callback-запросов)
|
|
51
|
+
- [Отправка фото](#отправка-фото)
|
|
52
|
+
- [Отправка больших сообщений](#отправка-больших-сообщений)
|
|
53
|
+
- [Продвинутое использование](#продвинутое-использование)
|
|
54
|
+
- [Только IPv4](#только-ipv4)
|
|
55
|
+
- [Скачивание файлов](#скачивание-файлов)
|
|
56
|
+
- [Прокси](#прокси)
|
|
57
|
+
- [Ограничения KernelGram](#ограничения-kernelgram)
|
|
58
|
+
- [Переход с telebot](#переход-с-telebot)
|
|
59
|
+
- [Лицензия](#лицензия)
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Официальная документация
|
|
64
|
+
|
|
65
|
+
- FAQ по ботам KernelGram: https://kernelgram.club/bots
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Установка
|
|
70
|
+
|
|
71
|
+
Библиотека протестирована на Python 3.8+.
|
|
72
|
+
|
|
73
|
+
Установка через pip:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
pip install kernelbot
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Или из исходников:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
pip install git+https://github.com/ReaalRick/kernelbot.git
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Первый бот
|
|
92
|
+
|
|
93
|
+
### Что нужно
|
|
94
|
+
|
|
95
|
+
Токен, полученный у `@BotFather` внутри приложения KernelGram. Назовём его `TOKEN`.
|
|
96
|
+
|
|
97
|
+
### Простой эхо-бот
|
|
98
|
+
|
|
99
|
+
Класс `TeleBot` инкапсулирует все вызовы API в одном классе. Он предоставляет функции вида `send_xyz` (`send_message`, `send_photo` и другие) и несколько способов слушать входящие сообщения.
|
|
100
|
+
|
|
101
|
+
Создайте файл `echo_bot.py`:
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
import kernelbot
|
|
105
|
+
|
|
106
|
+
bot = kernelbot.TeleBot("TOKEN", parse_mode=None)
|
|
107
|
+
|
|
108
|
+
@bot.message_handler(commands=['start', 'help'])
|
|
109
|
+
def send_welcome(message):
|
|
110
|
+
bot.reply_to(message, "Howdy, how are you doing?")
|
|
111
|
+
|
|
112
|
+
@bot.message_handler(func=lambda m: True)
|
|
113
|
+
def echo_all(message):
|
|
114
|
+
bot.reply_to(message, message.text)
|
|
115
|
+
|
|
116
|
+
bot.infinity_polling()
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Запуск:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
python echo_bot.py
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Проверьте: отправьте /start и любое текстовое сообщение.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### Общая документация API
|
|
130
|
+
|
|
131
|
+
Все типы описаны в kernelbot.types. Они соответствуют определениям KernelGram Bot API
|
|
132
|
+
|
|
133
|
+
У объекта Message есть атрибут content_type, одно из значений:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
text, audio, document, animation, photo, sticker, video,
|
|
137
|
+
video_note, voice, location, contact, venue, dice,
|
|
138
|
+
new_chat_members, left_chat_member, new_chat_title, new_chat_photo,
|
|
139
|
+
delete_chat_photo, group_chat_created, supergroup_chat_created,
|
|
140
|
+
channel_chat_created, migrate_to_chat_id, migrate_from_chat_id,
|
|
141
|
+
pinned_message, invoice, successful_payment, connected_website,
|
|
142
|
+
poll, passport_data, proximity_alert_triggered, video_chat_scheduled,
|
|
143
|
+
video_chat_started, video_chat_ended, video_chat_participants_invited,
|
|
144
|
+
web_app_data, message_auto_delete_timer_changed, forum_topic_created,
|
|
145
|
+
forum_topic_closed, forum_topic_reopened, forum_topic_edited,
|
|
146
|
+
general_forum_topic_hidden, general_forum_topic_unhidden,
|
|
147
|
+
write_access_allowed, user_shared, chat_shared, story.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
У типа Message также есть from_user — KernelGram Bot API возвращает отправителя в поле from, но from — зарезервированное слово в Python, поэтому оно переименовано.
|
|
151
|
+
|
|
152
|
+
Методы
|
|
153
|
+
|
|
154
|
+
Все методы API находятся в классе TeleBot. Имена следуют обычным соглашениям Python:
|
|
155
|
+
|
|
156
|
+
KernelGram API метод kernelbot
|
|
157
|
+
getMe get_me()
|
|
158
|
+
sendMessage send_message()
|
|
159
|
+
sendPhoto send_photo()
|
|
160
|
+
editMessageText edit_message_text()
|
|
161
|
+
editMessageCaption edit_message_caption()
|
|
162
|
+
deleteMessage delete_message()
|
|
163
|
+
answerCallbackQuery answer_callback_query()
|
|
164
|
+
getUpdates get_updates()
|
|
165
|
+
getFile get_file()
|
|
166
|
+
|
|
167
|
+
Обработчики сообщений
|
|
168
|
+
|
|
169
|
+
Обработчик сообщений — это функция, декорированная message_handler экземпляра TeleBot:
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
@bot.message_handler(commands=['start'])
|
|
173
|
+
def handle_start(message):
|
|
174
|
+
pass
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Поддерживаемые фильтры:
|
|
178
|
+
|
|
179
|
+
Имя Аргументы Условие
|
|
180
|
+
content_types список строк (по умолчанию ['text']) True, если message.content_type в списке
|
|
181
|
+
regexp строка регулярного выражения True, если re.search совпадает с message.text
|
|
182
|
+
commands список строк True, если message.text начинается с одной из команд
|
|
183
|
+
chat_types список типов чатов True, если message.chat.type в списке
|
|
184
|
+
func lambda или ссылка на функцию True, если вызываемый объект возвращает True
|
|
185
|
+
|
|
186
|
+
Все обработчики проверяются в порядке объявления.
|
|
187
|
+
|
|
188
|
+
Обработчики callback-запросов
|
|
189
|
+
|
|
190
|
+
Инлайн-кнопки передаются через reply_markup с полем inline_keyboard:
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
@bot.message_handler(commands=["start"])
|
|
194
|
+
def start(message):
|
|
195
|
+
markup = {
|
|
196
|
+
"inline_keyboard": [
|
|
197
|
+
[{"text": "Say hi", "callback_data": "hi"}],
|
|
198
|
+
],
|
|
199
|
+
}
|
|
200
|
+
bot.send_message(message.chat.id, "Choose:", reply_markup=markup)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
@bot.callback_query_handler(func=lambda call: call.data == "hi")
|
|
204
|
+
def on_hi(call):
|
|
205
|
+
bot.answer_callback_query(call.id, text="Hello!")
|
|
206
|
+
bot.send_message(call.message.chat.id, "Hi there!")
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Отправка фото
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
with open("photo.jpg", "rb") as f:
|
|
213
|
+
bot.send_photo(chat_id, f, caption="<b>Look</b>", reply_markup=markup)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Отправка больших сообщений
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
from kernelbot import util
|
|
220
|
+
|
|
221
|
+
large_text = open("large_text.txt", "rb").read()
|
|
222
|
+
for text in util.smart_split(large_text, chars_per_string=3000):
|
|
223
|
+
bot.send_message(chat_id, text)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
Продвинутое использование
|
|
229
|
+
|
|
230
|
+
Только IPv4
|
|
231
|
+
|
|
232
|
+
API KernelGram обслуживается через Cloudflare, который отдаёт и IPv4-, и IPv6-адреса. В некоторых мобильных сетях IPv6 до Cloudflare не доходит, что вызывает ClientConnectorDNSError или No route to host.
|
|
233
|
+
|
|
234
|
+
kernelbot по умолчанию форсит IPv4. Чтобы отключить:
|
|
235
|
+
|
|
236
|
+
```python
|
|
237
|
+
from kernelbot import apihelper
|
|
238
|
+
apihelper.FORCE_IPV4 = False
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Скачивание файлов
|
|
242
|
+
|
|
243
|
+
```python
|
|
244
|
+
import requests
|
|
245
|
+
from kernelbot import apihelper
|
|
246
|
+
|
|
247
|
+
file_info = bot.get_file(file_id)
|
|
248
|
+
url = apihelper.FILE_URL.format(bot.token, file_info.file_path)
|
|
249
|
+
content = requests.get(url).content
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Прокси
|
|
253
|
+
|
|
254
|
+
```python
|
|
255
|
+
from kernelbot import apihelper
|
|
256
|
+
apihelper.proxy = {"https": "socks5://user:pass@host:port"}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Требует pip install requests[socks] для SOCKS-прокси.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
Ограничения KernelGram
|
|
264
|
+
|
|
265
|
+
Некоторые методы и возможности Telegram Bot API в KernelGram не реализованы или работают иначе:
|
|
266
|
+
|
|
267
|
+
· setMyProfilePhoto — отсутствует (METHOD_NOT_FOUND). Аватар бота устанавливается через @BotFather.
|
|
268
|
+
· Reply-клавиатуры (reply_markup.keyboard) принимаются API, но не отображаются в клиенте. Используйте инлайн-клавиатуры (reply_markup.inline_keyboard).
|
|
269
|
+
· Все методы set* для профиля бота (имя, описание, команды) доступны только через @BotFather.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
Переход с telebot
|
|
274
|
+
|
|
275
|
+
kernelbot повторяет публичный API pyTelegramBotAPI. Для перехода достаточно двух строк:
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
# Было
|
|
279
|
+
import telebot
|
|
280
|
+
bot = telebot.TeleBot(TOKEN)
|
|
281
|
+
|
|
282
|
+
# Стало
|
|
283
|
+
import kernelbot
|
|
284
|
+
bot = kernelbot.TeleBot(TOKEN)
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Всё остальное — обработчики, фильтры, reply_to, send_message, infinity_polling — работает так же.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
Лицензия
|
|
292
|
+
|
|
293
|
+
MIT. См. LICENSE.
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# kernelbot
|
|
2
|
+
|
|
3
|
+
Простая, но расширяемая реализация **KernelGram Bot API** на Python.
|
|
4
|
+
|
|
5
|
+
[](https://pypi.org/project/kernelbot/)
|
|
6
|
+
[](https://www.python.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://kernelgram.club)
|
|
9
|
+
|
|
10
|
+
`kernelbot` — это замена [`pyTelegramBotAPI`](https://github.com/eternnoir/pyTelegramBotAPI) (telebot), адаптированная для [KernelGram](https://kernelgram.club) — мессенджера по типу телеграма но со своим сервером. Если у вас есть код под `telebot`, достаточно поменять импорт — и он заработает.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Содержание
|
|
15
|
+
|
|
16
|
+
- [Официальная документация](#официальная-документация)
|
|
17
|
+
- [Установка](#установка)
|
|
18
|
+
- [Первый бот](#первый-бот)
|
|
19
|
+
- [Что нужно](#что-нужно)
|
|
20
|
+
- [Простой эхо-бот](#простой-эхо-бот)
|
|
21
|
+
- [Общая документация API](#общая-документация-api)
|
|
22
|
+
- [Типы](#типы)
|
|
23
|
+
- [Методы](#методы)
|
|
24
|
+
- [Обработчики сообщений](#обработчики-сообщений)
|
|
25
|
+
- [Обработчики callback-запросов](#обработчики-callback-запросов)
|
|
26
|
+
- [Отправка фото](#отправка-фото)
|
|
27
|
+
- [Отправка больших сообщений](#отправка-больших-сообщений)
|
|
28
|
+
- [Продвинутое использование](#продвинутое-использование)
|
|
29
|
+
- [Только IPv4](#только-ipv4)
|
|
30
|
+
- [Скачивание файлов](#скачивание-файлов)
|
|
31
|
+
- [Прокси](#прокси)
|
|
32
|
+
- [Ограничения KernelGram](#ограничения-kernelgram)
|
|
33
|
+
- [Переход с telebot](#переход-с-telebot)
|
|
34
|
+
- [Лицензия](#лицензия)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Официальная документация
|
|
39
|
+
|
|
40
|
+
- FAQ по ботам KernelGram: https://kernelgram.club/bots
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Установка
|
|
45
|
+
|
|
46
|
+
Библиотека протестирована на Python 3.8+.
|
|
47
|
+
|
|
48
|
+
Установка через pip:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
pip install kernelbot
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Или из исходников:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
pip install git+https://github.com/ReaalRick/kernelbot.git
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Первый бот
|
|
67
|
+
|
|
68
|
+
### Что нужно
|
|
69
|
+
|
|
70
|
+
Токен, полученный у `@BotFather` внутри приложения KernelGram. Назовём его `TOKEN`.
|
|
71
|
+
|
|
72
|
+
### Простой эхо-бот
|
|
73
|
+
|
|
74
|
+
Класс `TeleBot` инкапсулирует все вызовы API в одном классе. Он предоставляет функции вида `send_xyz` (`send_message`, `send_photo` и другие) и несколько способов слушать входящие сообщения.
|
|
75
|
+
|
|
76
|
+
Создайте файл `echo_bot.py`:
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
import kernelbot
|
|
80
|
+
|
|
81
|
+
bot = kernelbot.TeleBot("TOKEN", parse_mode=None)
|
|
82
|
+
|
|
83
|
+
@bot.message_handler(commands=['start', 'help'])
|
|
84
|
+
def send_welcome(message):
|
|
85
|
+
bot.reply_to(message, "Howdy, how are you doing?")
|
|
86
|
+
|
|
87
|
+
@bot.message_handler(func=lambda m: True)
|
|
88
|
+
def echo_all(message):
|
|
89
|
+
bot.reply_to(message, message.text)
|
|
90
|
+
|
|
91
|
+
bot.infinity_polling()
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Запуск:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
python echo_bot.py
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Проверьте: отправьте /start и любое текстовое сообщение.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Общая документация API
|
|
105
|
+
|
|
106
|
+
Все типы описаны в kernelbot.types. Они соответствуют определениям KernelGram Bot API
|
|
107
|
+
|
|
108
|
+
У объекта Message есть атрибут content_type, одно из значений:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
text, audio, document, animation, photo, sticker, video,
|
|
112
|
+
video_note, voice, location, contact, venue, dice,
|
|
113
|
+
new_chat_members, left_chat_member, new_chat_title, new_chat_photo,
|
|
114
|
+
delete_chat_photo, group_chat_created, supergroup_chat_created,
|
|
115
|
+
channel_chat_created, migrate_to_chat_id, migrate_from_chat_id,
|
|
116
|
+
pinned_message, invoice, successful_payment, connected_website,
|
|
117
|
+
poll, passport_data, proximity_alert_triggered, video_chat_scheduled,
|
|
118
|
+
video_chat_started, video_chat_ended, video_chat_participants_invited,
|
|
119
|
+
web_app_data, message_auto_delete_timer_changed, forum_topic_created,
|
|
120
|
+
forum_topic_closed, forum_topic_reopened, forum_topic_edited,
|
|
121
|
+
general_forum_topic_hidden, general_forum_topic_unhidden,
|
|
122
|
+
write_access_allowed, user_shared, chat_shared, story.
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
У типа Message также есть from_user — KernelGram Bot API возвращает отправителя в поле from, но from — зарезервированное слово в Python, поэтому оно переименовано.
|
|
126
|
+
|
|
127
|
+
Методы
|
|
128
|
+
|
|
129
|
+
Все методы API находятся в классе TeleBot. Имена следуют обычным соглашениям Python:
|
|
130
|
+
|
|
131
|
+
KernelGram API метод kernelbot
|
|
132
|
+
getMe get_me()
|
|
133
|
+
sendMessage send_message()
|
|
134
|
+
sendPhoto send_photo()
|
|
135
|
+
editMessageText edit_message_text()
|
|
136
|
+
editMessageCaption edit_message_caption()
|
|
137
|
+
deleteMessage delete_message()
|
|
138
|
+
answerCallbackQuery answer_callback_query()
|
|
139
|
+
getUpdates get_updates()
|
|
140
|
+
getFile get_file()
|
|
141
|
+
|
|
142
|
+
Обработчики сообщений
|
|
143
|
+
|
|
144
|
+
Обработчик сообщений — это функция, декорированная message_handler экземпляра TeleBot:
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
@bot.message_handler(commands=['start'])
|
|
148
|
+
def handle_start(message):
|
|
149
|
+
pass
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Поддерживаемые фильтры:
|
|
153
|
+
|
|
154
|
+
Имя Аргументы Условие
|
|
155
|
+
content_types список строк (по умолчанию ['text']) True, если message.content_type в списке
|
|
156
|
+
regexp строка регулярного выражения True, если re.search совпадает с message.text
|
|
157
|
+
commands список строк True, если message.text начинается с одной из команд
|
|
158
|
+
chat_types список типов чатов True, если message.chat.type в списке
|
|
159
|
+
func lambda или ссылка на функцию True, если вызываемый объект возвращает True
|
|
160
|
+
|
|
161
|
+
Все обработчики проверяются в порядке объявления.
|
|
162
|
+
|
|
163
|
+
Обработчики callback-запросов
|
|
164
|
+
|
|
165
|
+
Инлайн-кнопки передаются через reply_markup с полем inline_keyboard:
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
@bot.message_handler(commands=["start"])
|
|
169
|
+
def start(message):
|
|
170
|
+
markup = {
|
|
171
|
+
"inline_keyboard": [
|
|
172
|
+
[{"text": "Say hi", "callback_data": "hi"}],
|
|
173
|
+
],
|
|
174
|
+
}
|
|
175
|
+
bot.send_message(message.chat.id, "Choose:", reply_markup=markup)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@bot.callback_query_handler(func=lambda call: call.data == "hi")
|
|
179
|
+
def on_hi(call):
|
|
180
|
+
bot.answer_callback_query(call.id, text="Hello!")
|
|
181
|
+
bot.send_message(call.message.chat.id, "Hi there!")
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Отправка фото
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
with open("photo.jpg", "rb") as f:
|
|
188
|
+
bot.send_photo(chat_id, f, caption="<b>Look</b>", reply_markup=markup)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Отправка больших сообщений
|
|
192
|
+
|
|
193
|
+
```python
|
|
194
|
+
from kernelbot import util
|
|
195
|
+
|
|
196
|
+
large_text = open("large_text.txt", "rb").read()
|
|
197
|
+
for text in util.smart_split(large_text, chars_per_string=3000):
|
|
198
|
+
bot.send_message(chat_id, text)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
Продвинутое использование
|
|
204
|
+
|
|
205
|
+
Только IPv4
|
|
206
|
+
|
|
207
|
+
API KernelGram обслуживается через Cloudflare, который отдаёт и IPv4-, и IPv6-адреса. В некоторых мобильных сетях IPv6 до Cloudflare не доходит, что вызывает ClientConnectorDNSError или No route to host.
|
|
208
|
+
|
|
209
|
+
kernelbot по умолчанию форсит IPv4. Чтобы отключить:
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
from kernelbot import apihelper
|
|
213
|
+
apihelper.FORCE_IPV4 = False
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Скачивание файлов
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
import requests
|
|
220
|
+
from kernelbot import apihelper
|
|
221
|
+
|
|
222
|
+
file_info = bot.get_file(file_id)
|
|
223
|
+
url = apihelper.FILE_URL.format(bot.token, file_info.file_path)
|
|
224
|
+
content = requests.get(url).content
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Прокси
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from kernelbot import apihelper
|
|
231
|
+
apihelper.proxy = {"https": "socks5://user:pass@host:port"}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Требует pip install requests[socks] для SOCKS-прокси.
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
Ограничения KernelGram
|
|
239
|
+
|
|
240
|
+
Некоторые методы и возможности Telegram Bot API в KernelGram не реализованы или работают иначе:
|
|
241
|
+
|
|
242
|
+
· setMyProfilePhoto — отсутствует (METHOD_NOT_FOUND). Аватар бота устанавливается через @BotFather.
|
|
243
|
+
· Reply-клавиатуры (reply_markup.keyboard) принимаются API, но не отображаются в клиенте. Используйте инлайн-клавиатуры (reply_markup.inline_keyboard).
|
|
244
|
+
· Все методы set* для профиля бота (имя, описание, команды) доступны только через @BotFather.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
Переход с telebot
|
|
249
|
+
|
|
250
|
+
kernelbot повторяет публичный API pyTelegramBotAPI. Для перехода достаточно двух строк:
|
|
251
|
+
|
|
252
|
+
```python
|
|
253
|
+
# Было
|
|
254
|
+
import telebot
|
|
255
|
+
bot = telebot.TeleBot(TOKEN)
|
|
256
|
+
|
|
257
|
+
# Стало
|
|
258
|
+
import kernelbot
|
|
259
|
+
bot = kernelbot.TeleBot(TOKEN)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Всё остальное — обработчики, фильтры, reply_to, send_message, infinity_polling — работает так же.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
Лицензия
|
|
267
|
+
|
|
268
|
+
MIT. См. LICENSE.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""kernelbot — KernelGram Bot API library, telebot-compatible."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from .version import __version__
|
|
6
|
+
from .bot import TeleBot
|
|
7
|
+
from . import apihelper
|
|
8
|
+
from . import types
|
|
9
|
+
from . import util
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger("kernelbot")
|
|
12
|
+
|
|
13
|
+
__all__ = ["TeleBot", "apihelper", "types", "util", "__version__"]
|