Как запустить aiogram бота с помощью прокси url. Как пробросить webhook Telegram бота на домашний компьютер через виртуальный сервер с OpenVPN и Docker?
- Как запустить aiogram бота с помощью прокси url. Как пробросить webhook Telegram бота на домашний компьютер через виртуальный сервер с OpenVPN и Docker?
- Warning aiogram:goodbye. Как решить проблему, не запускается бот python с библиотекой aiogram?
- State proxy aiogram. Как получать от пользователя файл, а потом хранить его в памяти (aiogram)?
- Aiogram contact handler. Кнопки, как шаблоны ¶
Как запустить aiogram бота с помощью прокси url. Как пробросить webhook Telegram бота на домашний компьютер через виртуальный сервер с OpenVPN и Docker?
Доброго времени суток. Проблема такая… Мне удобно вести разработку и отлаживать бота у себя на домашнем компьютере при помощи Docker, т.к. в дальнейшем сильно упрощается деплой на сервер. Но я не могу позволить пробросить телеграммовский вебхук себе на локальную машину по логичным причинам, а его нужно как-то дебажить в процессе работы, клиенту результат показывать и т.д. Постоянно пушуить/пуллить всё на продакшн сервер и там запускать для дебага - не вариант. Примерно представляю, что в данном случае мне легче заиметь какой-нибудь самый дешевый виртуальный сервер, который будет выступать в роли организатора туннеля через OpenVPN. Вопрос тогда в том, как это правильно всё настроить. С OpenVPN раньше не работал, не знаю с какой стороны подойти. Ситуацию усложняет то, что для вебхука тг необходим ssl сертификат, а домен держать на сервере не хочется. Могу ли я его просто на ip повесить, тг даст мне такой вебхук установить? И как в итоге это всё на моей стороне должно описываться? В случае с aiogram, например… Пример запуска бота с вебхуком:
import logging
from aiogram import Bot, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher
from aiogram.dispatcher.webhook import SendMessage
from aiogram.utils.executor import start_webhook
API_TOKEN = 'BOT_TOKEN_HERE'
# webhook settings
WEBHOOK_HOST = 'https://your.domain'
WEBHOOK_PATH = '/path/to/api'
WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}"
# webserver settings
WEBAPP_HOST = 'localhost' # or ip
WEBAPP_PORT = 3001
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())
@dp.message_handler()
async def echo(message: types.Message):
# Regular request
# await bot.send_message(message.chat.id, message.text)
# or reply INTO webhook
return SendMessage(message.chat.id, message.text)
async def on_startup(dp):
await bot.set_webhook(WEBHOOK_URL)
# insert code here to run it after start
async def on_shutdown(dp):
logging.warning('Shutting down..')
# insert code here to run it before shutdown
# Remove webhook (not acceptable in some cases)
await bot.delete_webhook()
# Close DB connection (if used)
await dp.storage.close()
await dp.storage.wait_closed()
logging.warning('Bye!')
if __name__ == '__main__':
start_webhook(
dispatcher=dp,
webhook_path=WEBHOOK_PATH,
on_startup=on_startup,
on_shutdown=on_shutdown,
skip_updates=True,
host=WEBAPP_HOST,
port=WEBAPP_PORT,
)
- Вопрос задан
Warning aiogram:goodbye. Как решить проблему, не запускается бот python с библиотекой aiogram?
Создал для теста простого бота
import config
import logging
from aiogram import Bot, Dispatcher, executor, types
# Задаем уровень логов
logging.basicConfig(level=logging.INFO)
# Инициализация бота
bot = Bot(token=config.tokenbot)
dp = Dispatcher(bot)
# Эхо
@dp.message_handler()
async def echo(message: types.Message):
await message.answer(message.text)
# запускаем лонг поллинг
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
WARNING:aiogram:Goodbye!Уже все что смог в интернете перечитал, не могу понять в чем проблема.
Traceback (most recent call last):
File "C:/Users/zahar/Downloads/bot/bot.py", line 21, in
executor.start_polling(dp, skip_updates=True)
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py", line 41, in start_polling
executor.start_polling(reset_webhook=reset_webhook, timeout=timeout, relax=relax, fast=fast)
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py", line 305, in start_polling
loop.run_until_complete(self._startup_polling())
File "C:\Users\zahar\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result()
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py", line 356, in _startup_polling
await self._welcome()
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py", line 346, in _welcome
user = await self.dispatcher.bot.me
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\bot.py", line 27, in me
setattr(self, '_me', await self.get_me())
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\bot.py", line 176, in get_me
result = await self.request(api.Methods.GET_ME, payload)
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\base.py", line 201, in request
return await api.make_request(self.session, self.__token, method, data, files,
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\api.py", line 104, in make_request
return check_result(method, response.content_type, response.status, await response.text())
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\api.py", line 84, in check_result
exceptions.Unauthorized.detect(description)
File "C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\exceptions.py", line 137, in detect
raise cls(description)
aiogram.utils.exceptions.Unauthorized: Unauthorized
Несколько раз устанавливал библиотеку, все что только смог обновил.
State proxy aiogram. Как получать от пользователя файл, а потом хранить его в памяти (aiogram)?
Я получаю от пользователя текст и хочу получать от пользователя pdf файл, а затем хранить его в памяти( в дальнейшем выводить пользователю по команде), поискав в документации, что то не смог найти данного решения и обращяюсь сюда. Заранее скажу, что я новичек в библиотеке и в целом и python.
Так же, хендлеры зарагестрированны в основном файле и закоменчены
Пожалуйста, подскажите каким образом это можно реализовать в коде ниже( заранее спасибо )
from aiogram import types
from aiogram import Bot
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import Dispatcher
import os
from aiogram.contrib.fsm_storage.memory import MemoryStorage
class FSMAdmin(StatesGroup):
date = State()
pfd = State()
# @dp.message_handler(commands='Загрузить', state=None)
async def cm(message : types.Message):
await FSMAdmin.date.set()
await message.reply('Введите дату')
# @dp.message_handler(state=FSMAdmin.date)
async def load_date(message : types.Message, state:FSMContext):
async with state.proxy() as data:
data = message.text
await FSMAdmin.next()
await message.reply('Загрузите PDF файл')
# @dp.message_handler(content_types=,state=FSMAdmin.pfd)
async def load_pdf(message : types.Message, state: FSMContext):
async with state.proxy() as data:
data = message.document.file_id
async with state.proxy() as data:
await message.reply(data)
await state.finish()
def register_handlers_client(dp : Dispatcher):
dp.register_message_handler(cm, commands=, State=None)
dp.register_message_handler(load_date, state=FSMAdmin.date)
dp.register_message_handler(load_pdf, content_types=, state=FSMAdmin.pfd)
- Вопрос задан
Aiogram contact handler. Кнопки, как шаблоны ¶
Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже). Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.
Напишем хэндлер, который будет при нажатии на команду/start
отправлять сообщение с двумя кнопками:
Несмотря на то, что Telegram Bot APIуказывать
просто строки вместо объектовKeyboardButton
, при попытке использовать строку aiogram 3.x выкинет ошибку
валидации и это не баг, а фича .
Живите теперь с этим ♂️
Что ж, запустим бота и обалдеем от громадных кнопок:
Aiogram Contact Handler: Кнопки, как шаблоны
Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже).
Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.
Что ж, запустим бота и обалдеем от громадных кнопок:
from aiogram import Bot, Dispatcher, types
bot = Bot(token='YOUR_BOT_TOKEN')
dp = Dispatcher(bot)
@dp.message_handler(content_types=types.Text)
async def handle_message(message: types.Message):
if message.text == 'button1':
await message.answer('This is button1')
elif message.text == 'button2':
await message.answer('This is button2')
dp.start_polling()
В этом примере мы создаем бота с помощью aiogram и регистрируем обработчик для текстовых сообщений. В этом обработчике мы проверяем текст сообщения и отправляем соответствующее ответное сообщение.
Таким образом, с помощью aiogram contact handler мы можем создавать кнопки, которые отправляют сообщения в чат, когда их нажимают.
Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько
же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный
параметрresize_keyboard=True
.