@StepanRodionov
Web-developer

Как подключить телеграм бота python?

Добрый вечер!
Начинаю делать боты на питоне - сразу столкнулся с проблемой. Скаченные из интернета примеры не работают (просто тупое молчание: как в боте, так и в консоли) - они все были написаны в дороскомнадзоровскую эпоху. Загуглил про проксирование - там надо указать прокси урл, который непонятно где найти
Вопрос - как бота подключить? Может есть библиотека, которая знает урлы или я должен его как-то найти и получить на специальном ресурсе? А потом менять когда он протухнет? Иными словами я сбит на старте, помогите!
Использую пока что python-telegram-bot, но могу библиотеку сменить, это не принципиально
  • Вопрос задан
  • 5120 просмотров
Решения вопроса 1
t0rr
@t0rr
PM
Самый свежая, современная и всегда самая актуальная библиотека - aiogram.
По ссылке открывается репозиторий. В нём есть примеры.

Если машина, с которой вы запускаете бота, находится в РФ, то вам понадобится использование proxy (в связи с блокировкой от РКН).
Бесплатные прокси можно поискать в телеграм, или купить доступ к прокси за небольшие деньги.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@be52
#! /usr/bin/python3
# -*- python -*-
# -*- coding: utf-8 -*-
#
# sudo apt install python3-pip
# sudo pip3 install python-telegram-bot --upgrade
#


from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import CallbackQueryHandler
import logging
import _thread, time
import configfile as cfg


TOKEN = cfg.token
USERID = cfg.userid


# в интернет через ТОР, в системе должен быть установлен TOR тк в РФ телеграм заблокирован
REQUEST_KWARGS={
    'proxy_url': 'socks5://127.0.0.1:9050'
}

#можно включить режим отладки, будет писать в сислог и в консоль
#logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.DEBUG)
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
#можно писать в свой лог в файл
#logging.basicConfig(filename = cfg.log_file2, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)



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

def start(bot, update):
	"""вызывается по команде /start
	"""
	bot.send_message(chat_id=update.message.chat_id, text = '*Привет!*', parse_mode='Markdown')
	
	keyboard = [[InlineKeyboardButton("Option 1", callback_data='1'),
				 InlineKeyboardButton("Option 2", callback_data='2')],
				[InlineKeyboardButton("Option 3", callback_data='3')]]
	reply_markup = InlineKeyboardMarkup(keyboard)
	update.message.reply_text('Please choose:', reply_markup=reply_markup)
	

def check_for_updates(bot, job):
	"""вызывается по таймеру периодически
	
	"""
	bot.send_message(chat_id=USERID, text = 'тик так', disable_notification=True)
	job.interval += 1
	pass


def echo(bot, update):
	"""вызывается любым текстом от собеседника, но не командой файлом итп
	отвечает эхом
	"""
	t=update.message.text
	bot.send_message(chat_id=update.message.chat_id, text = t)
	

def caps(bot, update, args):
	"""команда с аргументами /caps привед медвед
	"""
	text_caps = ' '.join(args).upper()
	bot.send_message(chat_id=update.message.chat_id, text=text_caps)
	

def button(bot, update):
	"""Обработчик нажатий на кнопки, для всех кнопок один обработчик
	который получает имя кнопки на которую было нажатие (query.data)
	"""
	query = update.callback_query
	
	bot.edit_message_text(text="Selected option: {}".format(query.data),
						  chat_id=query.message.chat_id,
						  message_id=query.message.message_id)


def watch_files_thread(bot, job):
	"""Бесконечный цикл в котором можно делать всё что угодно
	"""
	while True:
		time.sleep(10)
		bot.send_message(chat_id=USERID, text='123')
	
	
def watch_files(bot, job):
	"""Запускается ботом 1 раз и тут же запускает в фоне функцию которая будет работать отдельно от бота
	в этой функции можно прописать любое расписание и любые действия никак не связанные с событиями в боте
	"""
	_thread.start_new_thread(watch_files_thread, (bot, job))


def f1():
	#создаем бота и обработчик команд
	updater = Updater(token = TOKEN, request_kwargs = REQUEST_KWARGS)
	dispatcher = updater.dispatcher
	#обработчик команды start
	start_handler = CommandHandler('start', start)
	dispatcher.add_handler(start_handler)
	#обработчик команды с параметрами
	caps_handler = CommandHandler('caps', caps, pass_args=True)
	dispatcher.add_handler(caps_handler)
	#добавляем регулярное задание, интервал в секундах, начать немедленно
	#t=(6*60*60)
	job = updater.job_queue
	t=10
	job_minute = job.run_repeating(check_for_updates, interval=t, first=0)
	#запускаем в фоне функцию работающую отдельно от бота, задежка запуска 0 секунд
	job.run_once(watch_files, 0)
	#добавляем обработчик текстовых сообщений
	echo_handler = MessageHandler(Filters.text, echo)
	dispatcher.add_handler(echo_handler)
	#обработчик кнопок
	dispatcher.add_handler(CallbackQueryHandler(button))
	#запускаем главный цикл
	updater.start_polling()


if __name__ == '__main__':
	f1()
Ответ написан
Комментировать
@StepanRodionov Автор вопроса
Web-developer
Запоздало благодарю за ответы) Для себя проблему в итоге решил арендой сервера вне юрисдикции РФ. 200 р/мес и проблемы решены
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы