Pythoner
7.23K subscribers
860 photos
27 videos
4 files
654 links
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику.

Сотрудничество - @flattys
Цены - @serpent_media

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
➡️Использование библиотеки Selenium

Первый шаг в создании автообновления страницы - использование библиотеки Selenium. Selenium - это набор инструментов для автоматизации веб-браузеров. Он позволяет Python взаимодействовать с браузером, как если бы это делал человек. С помощью Selenium мы можем открыть веб-страницу и обновить ее.

➡️Пример кода:

from selenium import webdriver

driver = webdriver.Firefox() # или любой другой браузер
driver.get('<http://www.example.com>')



➡️Использование метода refresh

Второй шаг - это использование метода refresh в Selenium. Этот метод позволяет обновить текущую страницу. В комбинации с библиотекой time в Python, мы можем настроить скрипт так, чтобы он автоматически обновлял страницу через определенные интервалы времени.

➡️Пример кода:

import time

while True:
driver.refresh() # обновляем страницу
time.sleep(10) # ждем 10 секунд


🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥3
➡️Понимание Keyboard.add_hotkey

Функция keyboard.add_hotkey() в Python позволяет вам назначить определенную функцию на клавиатурный ярлык, известный как горячая клавиша. Эта функция принимает два основных аргумента: комбинацию клавиш и функцию, которая будет выполнена при нажатии горячей клавиши. Синтаксис следующий: keyboard.add_hotkey(hotkey, callback, args=(), suppress=False, timeout=3, trigger_on_release=False). Горячей клавишей может быть одна клавиша, комбинация клавиш или даже последовательность клавиш.

➡️Примеры использования Keyboard.add_hotkey

Функция keyboard.add_hotkey() очень удобна для автоматизации задач и увеличения интерактивности ваших скриптов на Python. Например, вы можете использовать ее, чтобы создать простой кейлоггер, автоматизировать создание скриншотов или даже создать пользовательский ярлык для определенной задачи в вашем приложении на Python. Однако очень важно использовать эту функцию ответственно и этично, учитывая ее возможное злоупотребление.

➡️Практические примеры использования Keyboard.add_hotkey

Для иллюстрации рассмотрим пример, в котором мы хотим напечатать "Привет, Мир!" при нажатии клавиш 'Ctrl + H'. Сначала нам нужно импортировать модуль keyboard. Если он не установлен, используйте pip для его установки. Затем мы определяем нашу функцию и добавляем горячую клавишу следующим образом:

import keyboard

def hello_world():
print("Привет, Мир!")

keyboard.add_hotkey('ctrl + h', hello_world)
keyboard.wait()


⬆️В приведенном выше коде, каждый раз при нажатии 'Ctrl + H', вызывается функция hello_world, и "Привет, Мир!" выводится на консоль.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4🔥4
✈️TOML (Tom's Obvious, Minimal Language) - это простой формат конфигурационного файла, который стремится быть более понятным и легким для чтения, чем JSON или XML.

Они обеспечивают структурированный способ хранения настроек и конфигураций для приложения. TOML использует простой синтаксис, который легко читается и понимается, что делает его идеальным для использования в качестве языка конфигурации.

➡️Как установить библиотеку toml в Python?

Чтобы начать работу с TOML в Python, вам сначала нужно установить библиотеку toml. Вы можете сделать это с помощью инструмента pip, который является стандартным менеджером пакетов для Python. Просто откройте терминал и введите следующую команду: pip install toml.

➡️Как считывать TOML-конфиги в Python?

Считывание TOML-конфигов в Python легко осуществляется с помощью библиотеки toml. Вы просто открываете файл с помощью встроенной функции open(), а затем используете функцию toml.load() для разбора содержимого TOML-конфига. Вот простой пример:

➡️TOML-конфиг:

[server]
host = "127.0.0.1"
port = 8000

[database]
user = "admin"
password = "secret"


➡️Python код:

import toml

config = toml.load('config.toml')
print(config)


⬆️Результат выполнения этого кода:

{
'server': {
'host': '127.0.0.1',
'port': 8000
},
'database': {
'user': 'admin',
'password': 'secret'
}
}


⬆️В этом словаре, 'server' и 'database' - это ключи, соответствующие разделам в TOML-конфиге, и они содержат под-словари с параметрами этих разделов.

Вы можете получить доступ к любому параметру конфигурации, используя его ключи. Например, для получения адреса хоста сервера вы можете использовать config['server']['host'].

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64👍3
✈️Pyppeteer - это библиотека Python для автоматизации браузера Chromium с помощью Puppeteer JavaScript API. Это мощный инструмент для веб-скрейпинга, тестирования и автоматизации веб-браузера.

➡️Инсталляция библиотеки Pyppeteer

Установка Pyppeteer проста и прямолинейна. Все, что вам нужно, это Python 3.6 или выше. Установите Pyppeteer, используя pip: pip install pyppeteer. В процессе установки Pyppeteer скачает последнюю версию Chromium.

➡️Функциональные возможности Pyppeteer

Pyppeteer предлагает богатый набор функций для автоматизации веб-браузера. Вы можете автоматизировать ввод данных, клики по ссылкам, скачивание файлов и многое другое.

➡️Примеры использования Pyppeteer

Одним из самых распространенных применений Pyppeteer является создание снимков веб-страниц. Все, что вам нужно сделать, это создать экземпляр браузера, открыть новую страницу, перейти на URL и сделать снимок.

import asyncio
from pyppeteer import launch

async def take_screenshot(url, save_path):
browser = await launch()
page = await browser.newPage()
await page.goto(url)
await page.screenshot({'path': save_path})
await browser.close()

url = '<https://www.example.com>'
save_path = 'example.png'
asyncio.get_event_loop().run_until_complete(take_screenshot(url, save_path))


➡️Pyppeteer также может быть использован для автоматического тестирования веб-приложений, включая взаимодействие с JavaScript и AJAX.

import asyncio
from pyppeteer import launch

async def test_website(url):
browser = await launch()
page = await browser.newPage()
await page.goto(url)
await page.click('#myButton')
await page.waitForSelector('#myResult')
result = await page.evaluate('document.querySelector("#myResult").innerText')
await browser.close()
return result

url = '<https://www.example.com>'
asyncio.get_event_loop().run_until_complete(test_website(url))


Ссылка на либу — https://pypi.org/project/pyppeteer/

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥4
🔥Pyrogram (в простонародье "Пирог") это мощная библиотека для создания так называемых User Ботов для телеграмма.

🤖ЮзерБоты - это скрипты которые работают от лица личного аккаунта и могут выполнять все тоже что и человек.

➡️Например, можно запрограммировать автоответчик, который будет автоматически отвечать на определенные сообщения.

➡️Но в основном ЮзерБоты используют как дополнения к телеграму, например, встроенный калькулятор. Вы скорее всего уже видели их. Кто-то пишет комманду, скажем, .calc 2+2, а скрипт все считает и изменяя сообщение, выводит ответ.

⚡️Именно такого юзербота мы и будет создавать в следующих постах, так что подписывайся на канал, и включай уведомления!

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥65
✈️Сегодня продолжим тему предыдущего поста и начнём создавать бота

➡️Начнем с самой базы - установки.
python -m pip install pyrogram

🚀Для быстрой работы пирога лучше еще установить
python -m pip install TgCrypto


👀Теперь можно и код писать

➡️Импорт:
Импорт тут максимально простой. Просто из pyrogram импортируем модули через from / import:
from pyrogram import Client # потом ещё будем добавлять


➡️Создание объекта бота:
Как и в любом другом боте нам нужен объект, с помощью которого уже и осуществляется работа.
В пироге это экземпляр принято называть app.
В него нужно передать
💬Название, строка
💬API_ID, строка либо число (int)
💬API_HASH, строка
Про API_ID и API_HASH поговорим чуток позже.
app = Client("MyFirstUserBot", api_id, api_hash)


➡️Обработчики:
Обработчики (хендлеры, handler) это функции, которые срабатывают при определенном событии, например, при новом сообщении.
В Pyrogram они в виде декорратора который начинается на "on" (с англ - при), наример @app.on_message, @app.on_chat_join_request.
В декоратор следует передать фильтр, по которому будут выбираться случаи когда нужно чтобы обработчик сработал.
В библиотеке есть встроенные фильтры, их надо импортировать, но их можно и самому написать (научимся позже)

➡️Как я говорил в предыдущем посте, нам нужно обрабатывать команды. Для этого, логично, надо создать обработчик сообщений, с фильтром, что это команда, и то что написали ее мы (мы ведь не хотим чтобы другие командовали вашим ботом?)
@app.on_message(filters.command(["start"], prefixes=".") & filters.me)
async def start(_, msg):
pass


У обработчиков должен быть строгий порядок - от конкретных (например, команды), до более общих (всех сообщений)

Правильный порядок хендлеров сообщений должен выглядеть так:
Команды
Сообщения с какими-то триггерами (например, если в слове есть слово "привет")
Все сообщения


➡️Запуск:
Обработчики прописали, теперь пора это все дело запустить!
Тут всё просто:
app.run()


➡️API_ID / API_HASH:
И, самое главное, без чего наш код ни в коем случае не заработает - данные телеграмма.
Как я говорил выше, ЮзерБота, как бы входит в твой аккаунт. Ему конечно же нужны данные. Это и есть api_id и api_hash

✈️ Заходим на сайт https://my.telegram.org/apps
пишем свой номер телефона, на котором тг, и вводим код.
Это безопасно, это сайт телеграмма
Далее там будет бланк, вы его заполняете. Данные можете писать какие угодно, они ни на что не влияют. Вы должны дойти то страницы с конфигурацией приложение (App Configuration). Там копируете app api_id и app api_hash, и вставляете в код, там где создавали екземпляр бота (app = ...)
from pyrogram import Client, filters

app = Client("тут", "ваши", "данные")

@app.on_message(filters.commands(["start"], prefixes=".") & filters.me)
async def start(_, msg):
pass

app.run()


🔎Итоги:
Сегодня мы разобрались в базовой структуре ЮзерБота: поговорили про нужные классы, обработчики, их порядок, API данные. В следующем посте поговорим про отправку сообщений, редактирование, и тп.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156🔥6
🔥Продолжаем!

➡️Мы уже умеем создавать обработчики, теперь надо научится что-то делать, а не только принимать. В пироге функции отправки чего-либо начинаются на "send" - app.send_message, например.

➡️Чтобы детально разобраться в какой-то функции - надо заглянуть в документацию! Кстати, у pyrogram она очень удобная и понятная

https://docs.pyrogram.org

⬆️Нам нужен метод который отвечает за отправку сообщения. В документации слева в менюшке ищем Available Methods (Доступные методы) - далее - send_message (отправить сообщение). И видим полное описание этого метода, что он делает, какие параметры принимает, что возвращает и примеры.

➡️Сразу под названием видим описание метода, то что он делает
Send text messages.

То есть
(отправляет текстовое сообщение)


➡️Ниже список параметров которые нужно в него передать. Давайте его разберем.
chat_id (int | str) – Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use “me” or “self”. For a contact that exists in your Telegram address book you can use his phone number (str).

Или же
(chat_id (int | str) — уникальный идентификатор (int) или имя пользователя (str) целевого чата. Для вашего личного облака (сохраненных сообщений) вы можете просто использовать «me» или «self». Для контакта, который существует в вашей адресной книге Telegram, вы можете использовать его номер телефона (str))

В самое первое — название параметра далее в скобках тип данных. "|" - это "или", "либо". Если в скобках есть оptional, то это значит что этот аргумент не обязательный.
И последнее - описание.

⬆️Из цитаты нам становится понятно, что chat_id принимает ID чата в виде строки либо числа, либо номер телефона, либо "me"|"self" если надо отправить себе в избранное.

Второй параметр разберите сами
text (str) – Text of the message to be sent.

text (str) – Текст отправляемого сообщения.

тут совсем легко, так что, думаю, все справились, сюда надо передать строку с отправляемым текстом

👀В итоге, отправлять сообщения надо так:
await app.send_message(chat_id, "text")


Обратите внимание, что в начале я поставил await. Если вы новичок - то просто ставьте перед методами await и все, а если вы уже что-то знаете, то объяснять не надо)

➡️Bound Methods
Самые внимательные заметили, что в документации крок Available Methods есть еще Bound Methods (Связанные методы)
Их фишка в том, что это методы сообщений которые мы получаем из хендлера (параметр msg). Например, чтобы изменить сообщение, не обязательно писать
app.edit-бла-бла-бла, а можно просто msg.edit(). В него просто передаем строку и готово!

💬Задание: Пользуясь документацией, выясните что делает msg.reply() и какие параметры он принимает.

➡️Вернёмся в редактор кода
Теперь вспоминаем все что учили и соберём знания вместе. Сделаем так, чтобы при написании команды .start сообщение изменялось на Python Pyrogram!

from pyrogram import Client, filters

app = Client("UserBot", 123, "abc")

@app.on_message(filters.command(["start"], prefixes=".") & filters.me)
async def start(_, msg):
await msg.edit("Python Pyrogram!")

app.run()


👀Итоги:
Сегодня мы научились работать с документацией, и научились изменять сообщения. А в следующем посте научимся получать из сообщения данные - его текст, отправитель, и тп.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥84👍3
🔥И снова новый, но последний пост по пирогу. В прошлый раз я обещал научить вытаскивать данные из сообщения, этим и займёмся!

🔎Давайте с начала просто посмотрим из чего состоит получаемый объект

@app.on_message(filters.command(["start"], prefixes="."))
async def start(_, msg):
print(msg)

⬆️В результате увидим много всяких данных. Самые часто используемые - id, text, from_user, chat reply_to_message(сообщение на которое ответили).

➡️Чтобы достать определенное значение надо перечислить ключи к нему через точку:

msg.text
msg.chat.id
msg.reply_to_message.date


➡️Теперь попробуем на практике, поприветствуем новых участников в группе

@app.on_message(filters.chat([123,456]) & filters.new_chat_members)
async def welcome(_, msg):
new_members = [u.mention for u in msg.new_chat_members]
text = 'Привет, ' + ", ".join(new_members) + "!"
await msg.reply(text, True disable_web_page_preview=True)

⬆️Разберем этот код
💬Создаем Декоратор:
💬📰Из определенных чатов ([123,456])
💬📰Для новых участников
💬Создаем функцию
И тут начинается самое то, что нас интересует
💬Перебираем список новых участников, и из них берем параметр mention - имя с ссылкой.
💬Формируем текст сообщения, соеденяя список из новый участников с помощью *str.join()* (о нем мы говорили в прошлом посте )
💬Отвечаем на сообщение ответом и без предпросмотора ссылок

👀Итог
Мы научились доставать данные из сообщения и вспомнили фильтры с обработчиками. Надеюсь это серия постов вам понравилась.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🔥1
➡️Функция .upper()

Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это очень полезно, когда вы хотите сравнить строки без учета регистра или обеспечить единообразие ввода данных. Пример использования:

text = 'Hello, World!'
print(text.upper()) # Вывод: 'HELLO, WORLD!'


➡️Функция .lower()

С другой стороны, функция .lower() преобразует все символы строки в нижний регистр. Это также может быть полезно при сравнении строк или обеспечении единообразия ввода. Пример использования:

text = 'Hello, World!'
print(text.lower()) # Вывод: 'hello, world!'


➡️Применение .upper() и .lower()

Функции .upper() и .lower() часто используются вместе для обеспечения единообразия ввода и процесса обработки данных. Например, вы можете преобразовать ввод пользователя в нижний регистр перед проверкой его в словаре, где все ключи хранятся в нижнем регистре. Таким образом, вы можете быть уверены, что ваш код будет работать независимо от того, как пользователь ввел данные.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🔥1
Forwarded from IT memer
This media is not supported in your browser
VIEW IN TELEGRAM
😕Джун пытается предложить свою идею на общей встрече
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣37😢43👍1😁1
✈️Иногда элементы массива изначально неизвестны, но массив для их хранения необходим сейчас. Поэтому в NumPy есть функции для создания массива с исходным содержимым (по умолчанию тип массива — float64)

>>> import numpy as np


➡️zeros((n, m)) - создает массив нулей с размером n x m.

>>> np.zeros((3, 2))
array([[0., 0.],
[0., 0.],
[0., 0.]])


➡️ones((n, m)) - создает массив единиц с размером n x m.

>>> np.ones((2, 3))
array([[1., 1., 1.],
[1., 1., 1.]])

>>> np.ones((2, 2), dtype=np.int16)
array([[1, 1],
[1, 1]], dtype=int16)


➡️empty() - создает массив без заполнения. Исходное содержимое случайно и зависит от состояния памяти на момент создания массива (мусор, что в ней хранится).

>>> np.empty((2,2))
array([[5.e-324, 0.e+000],
[0.e+000, 5.e-324]])


📁Документация NumPy

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥2
✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изменения через SQL запросы. Миграции позволяют вам определять изменения в моделях и применять их к базе данных автоматически.

➡️Для начала работы с миграциями в Django необходимо создать начальное состояние базы данных, которое будет соответствовать текущим моделям вашего приложения. Для этого можно воспользоваться командой python manage.py makemigrations, которая создаст файл миграции в папке migrations вашего приложения.

➡️Затем, чтобы применить миграции к базе данных, можно воспользоваться командой python manage.py migrate, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях.

➡️Миграции в Django ORM могут включать различные операции, такие как создание новых таблиц, добавление и удаление полей, изменение типа данных и многое другое. Кроме того, можно создавать собственные миграции с помощью команды python manage.py makemigrations --empty, чтобы определить свои собственные изменения в базе данных.

👀Использование миграций в Django ORM делает процесс изменения структуры базы данных более удобным и безопасным, позволяя сохранить целостность данных и избежать ошибок при ручном внесении изменений.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥3
➡️Django чуть медленнее Flask из-за своей более высокой функциональности и накладных расходов. Однако на практике разница в скорости работы между ними незначительна для большинства веб-приложений.

➡️Flask может быть немного быстрее при обработке простых запросов, но Django лучше масштабируется при увеличении нагрузки благодаря встроенным инструментам кэширования и оптимизации.
Кроме того, производительность в большей степени зависит от архитектуры и качества кода конкретного приложения.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥2
✈️Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена.

➡️Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.

🔎Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍96🔥2
➡️Подготовка базы данных

Прежде чем начать вставку внешних ключей, необходимо подготовить базу данных и создать таблицы, между которыми мы будем устанавливать связи. Рассмотрим простой пример двух таблиц: authors и books. Таблица authors будет содержать информацию об авторах, а таблица books - информацию о книгах, написанных этими авторами. Для начала создадим эти таблицы с использованием языка SQL.

CREATE TABLE authors (
author_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);

CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author_id INT,
FOREIGN KEY (author_id) REFERENCES authors (author_id)
);


➡️Вставка данных и внешних ключей с помощью Python

Теперь, когда наша база данных готова, мы можем перейти к вставке данных и внешних ключей с помощью Python. Для этого нам понадобится библиотека psycopg2, которая позволяет взаимодействовать с PostgreSQL базой данных. Убедитесь, что она установлена:

pip install psycopg2


Далее, напишем скрипт на Python, который будет вставлять данные в таблицы authors и books, устанавливая соответствующие внешние ключи.

import psycopg2

# Соединение с базой данных
conn = psycopg2.connect(
dbname="your_db_name",
user="your_db_user",
password="your_db_password",
host="your_db_host",
port="your_db_port"
)
cursor = conn.cursor()

# Вставка данных в таблицу authors
cursor.execute("INSERT INTO authors (name) VALUES (%s) RETURNING author_id", ("J.K. Rowling",))
author_id = cursor.fetchone()[0]

#Вставка данных в таблицу books с указанием внешнего ключа
cursor.execute("INSERT INTO books (title, author_id) VALUES (%s, %s)", ("Harry Potter", author_id))

# Сохранение изменений и закрытие соединения
conn.commit()
cursor.close()
conn.close()


➡️Проверка и управление целостностью данных

Внешние ключи помогают поддерживать целостность данных в базе данных. Например, они не позволяют вставлять в таблицу books значения author_id, которых нет в таблице authors. Рассмотрим, как это работает на практике. Попробуем вставить книгу с несуществующим author_id и посмотрим, что произойдет.

try:
cursor.execute("INSERT INTO books (title, author_id) VALUES (%s, %s)", ("Unknown Book", 999))
conn.commit()
except psycopg2.IntegrityError as e:
conn.rollback()
print("Ошибка целостности данных: невозможно вставить книгу с несуществующим автором.")


В данном случае psycopg2 выбросит исключение IntegrityError, и мы сможем обработать его, откатив изменения и предупредив пользователя об ошибке.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5🔥3
✈️Контейнер — это объект, предназначенный для хранения других объектов. Контейнеры реализуют различные структуры данных, такие как списки, кортежи, словари, множества и другие.

➡️Основное назначение контейнеров — удобное и эффективное хранение и доступ к группам объектов. Контейнеры позволяют легко добавлять, удалять и итерировать элементы.

➡️Все контейнеры в Python реализуют общие методы, такие как len() для получения размера и contains() для проверки вхождения элемента. Это обеспечивает единый интерфейс работы с разными типами контейнеров.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍96🔥4
👍83
Что выдаст код выше
Anonymous Quiz
14%
a
42%
b
13%
c
5%
e
26%
Error
🤨9👍7🤓52
Разбор

Все, что вам стоит знать - это
// —> целочисленное деление
.count —> считает количество повторений текста/символа в строке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🤓4🔥3
1️⃣AIOGram:
Поддерживает асинхронное программирование, что позволяет эффективно обрабатывать множество запросов без блокирования основного потока.
Хорошо документирована и имеет большое сообщество разработчиков.
Предоставляет обширный набор функций для работы с Telegram API.
Деплоится не на всех бесплатных сервисах.

2️⃣python-telegram-bot:
Простой в использовании и понимании, особенно для новичков в разработке телеграм-ботов.
Хорошо документирована и имеет активное сообщество разработчиков.
Предоставляет обширный набор функций для работы с Telegram API.
Не поддерживает асинхронное программирование, поэтому может быть неэффективным при обработке большого количества запросов одновременно.
Из-за синхронного подхода может возникать блокирование основного потока при выполнении долгих операций.

3️⃣telebot:
Простой в использовании и понимании.
Хорошо документирована и имеет небольшое, но активное сообщество разработчиков.
Предоставляет обширный набор функций для работы с Telegram API.
Не поддерживает асинхронное программирование, поэтому может быть неэффективным при обработке большого количества запросов одновременно.
Некоторые функции могут быть менее гибкими или сложными в использовании по сравнению с другими библиотеками.

4️⃣twx.botapi:
Простой в использовании и понимании, особенно для новичков в разработке телеграм-ботов.
Хорошо документирована и имеет некоторые примеры использования.
Предоставляет базовый набор функций для работы с Telegram API.
Ограничена в функциональности и не предоставляет некоторые продвинутые возможности, доступные в других библиотеках.
Неактивно поддерживается и может быть устаревшей.


❗️Выбор конкретной библиотеки зависит от ваших потребностей, уровня опыта и предпочтений в разработке.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125🔥3