S
S
Stepan Rodionov2018-08-03 00:01:05
Python
Stepan Rodionov, 2018-08-03 00:01:05

How to connect telegram bot python?

Good evening!
I'm starting to make bots in python - I immediately ran into a problem. The examples downloaded from the Internet do not work (just stupid silence: both in the bot and in the console) - they were all written in the doroskomnadzor era. I googled about proxying - you need to specify a proxy url there, which is not clear where to find it
Question - how to connect a bot? Maybe there is a library that knows urls or should I somehow find it and get it on a special resource? And then change when it rots? In other words, I'm knocked down at the start, help!
I'm currently using python-telegram-bot, but I can change the library, it doesn't matter

Answer the question

In order to leave comments, you need to log in

3 answer(s)
O
Oleg A., 2018-08-04
@StepanRodionov

The most recent, up-to-date and always up-to-date library is aiogram .
The link opens the repository. It has examples.
If the machine from which you run the bot is located in the Russian Federation, then you will need to use a proxy (due to blocking from the RKN).
You can search for free proxies in telegrams, or buy access to a proxy for little money.

B
be52, 2018-08-03
@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 = 
  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()

S
Stepan Rodionov, 2019-01-19
@StepanRodionov

Thank you belatedly for the answers) For myself, I eventually solved the problem by renting a server outside the jurisdiction of the Russian Federation. 200 r / month and problems are solved

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question