Ошибка при запуске бота на python

Пытаюсь написать примитивного бота с использованием pyTelegramBotAPI, но при компиляции вылезает куча ошибок, и все сводятся к тому, что:

ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.

Включение прокси не помогает. Вот сам код бота:

import telebot

bot = telebot.TeleBot("TOKEN")

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(message, "Howdy, how are you doing?")


@bot.message_handler(func=lambda message: True)
def echo_all(message):
    bot.reply_to(message, message.text)


bot.polling()

Далее прилагаю полный список ошибок.

2020-05-07 19:18:42,444 (util.py:68 PollingThread) ERROR - TeleBot: "ConnectionError occurred, args=(MaxRetryError("HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))"),)
Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 159, in _new_conn
    conn = connection.create_connection(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 84, in create_connection
    raise err
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 74, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 381, in _make_request
    self._validate_conn(conn)
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 976, in _validate_conn
    conn.connect()
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 308, in connect
    conn = self._new_conn()
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 171, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 439, in send
    resp = conn.urlopen(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 724, in urlopen
    retries = retries.increment(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilretry.py", line 439, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotutil.py", line 62, in run
    task(*args, **kwargs)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 281, in __retrieve_updates
    updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 251, in get_updates
    json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 199, in get_updates
    return _make_request(token, method_url, params=payload)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 62, in _make_request
    result = _get_req_session().request(method, request_url, params=params, files=files,
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))
"
Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 159, in _new_conn
    conn = connection.create_connection(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 84, in create_connection
    raise err
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 74, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 381, in _make_request
    self._validate_conn(conn)
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 976, in _validate_conn
    conn.connect()
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 308, in connect
    conn = self._new_conn()
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 171, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 439, in send
    resp = conn.urlopen(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 724, in urlopen
    retries = retries.increment(
  File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilretry.py", line 439, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Documents/py/telegrambot/main.py", line 18, in <module>
    bot.polling()
  File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 415, in polling
    self.__threaded_polling(none_stop, interval, timeout)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 438, in __threaded_polling
    polling_thread.raise_exceptions()
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotutil.py", line 81, in raise_exceptions
    six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
  File "C:Documentspytelegrambotvenvlibsite-packagessix.py", line 703, in reraise
    raise value
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotutil.py", line 62, in run
    task(*args, **kwargs)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 281, in __retrieve_updates
    updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 251, in get_updates
    json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 199, in get_updates
    return _make_request(token, method_url, params=payload)
  File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 62, in _make_request
    result = _get_req_session().request(method, request_url, params=params, files=files,
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))

Process finished with exit code 1

Код:

# art

import telebot

bot = telebot.TeleBot("здесь токен")

bot.send_message(394970516, "text")

Ошибка:
C:Users1AppDataLocalProgramsPythonPython35python.exe C:/Users/1/PycharmProjects/untitled2/art.py
Traceback (most recent call last):
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 600, in urlopen
chunked=chunked)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 343, in _make_request
self._validate_conn(conn)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 849, in _validate_conn
conn.connect()
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connection.py», line 356, in connect
ssl_context=context)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3utilssl_.py», line 359, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 376, in wrap_socket
_context=self)
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 747, in __init__
self.do_handshake()
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 983, in do_handshake
self._sslobj.do_handshake()
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 628, in do_handshake
self._sslobj.do_handshake()
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал существующее подключение

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesrequestsadapters.py», line 445, in send
timeout=timeout
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3utilretry.py», line 367, in increment
raise six.reraise(type(error), error, _stacktrace)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3packagessix.py», line 685, in reraise
raise value.with_traceback(tb)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 600, in urlopen
chunked=chunked)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 343, in _make_request
self._validate_conn(conn)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connectionpool.py», line 849, in _validate_conn
conn.connect()
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3connection.py», line 356, in connect
ssl_context=context)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesurllib3utilssl_.py», line 359, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 376, in wrap_socket
_context=self)
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 747, in __init__
self.do_handshake()
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 983, in do_handshake
self._sslobj.do_handshake()
File «C:Users1AppDataLocalProgramsPythonPython35libssl.py», line 628, in do_handshake
self._sslobj.do_handshake()
urllib3.exceptions.ProtocolError: (‘Connection aborted.’, ConnectionResetError(10054, ‘Удаленный хост принудительно разорвал существующее подключение’, None, 10054, None))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File «C:/Users/1/PycharmProjects/untitled2/art.py», line 7, in
bot.send_message(394970516, «text»)
File «C:Users1AppDataLocalProgramsPythonPython35libtelebot__init__.py», line 480, in send_message
reply_markup, parse_mode, disable_notification))
File «C:Users1AppDataLocalProgramsPythonPython35libtelebotapihelper.py», line 140, in send_message
return _make_request(token, method_url, params=payload, method=’post’)
File «C:Users1AppDataLocalProgramsPythonPython35libtelebotapihelper.py», line 54, in _make_request
timeout=(connect_timeout, read_timeout), proxies=proxy)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesrequestssessions.py», line 512, in request
resp = self.send(prep, **send_kwargs)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesrequestssessions.py», line 622, in send
r = adapter.send(request, **kwargs)
File «C:Users1AppDataLocalProgramsPythonPython35libsite-packagesrequestsadapters.py», line 495, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: (‘Connection aborted.’, ConnectionResetError(10054, ‘Удаленный хост принудительно разорвал существующее подключение’, None, 10054, None))

Process finished with exit code 1

Пытаюсь написать примитивного бота с использованием pyTelegramBotAPI, но при компиляции вылезает куча ошибок, и все сводятся к тому, что:

ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.

Включение прокси не помогает. Вот сам код бота:

import telebot

bot = telebot.TeleBot("TOKEN")

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(message, "Howdy, how are you doing?")


@bot.message_handler(func=lambda message: True)
def echo_all(message):
    bot.reply_to(message, message.text)


bot.polling()

Далее прилагаю полный список ошибок.

2020-05-07 19:18:42,444 (util.py:68 PollingThread) ERROR - TeleBot: "ConnectionError occurred, args=(MaxRetryError("HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))"),) Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 159, in _new_conn conn = connection.create_connection( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 84, in create_connection raise err File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 74, in create_connection sock.connect(sa) ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 670, in urlopen httplib_response = self._make_request( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 381, in _make_request self._validate_conn(conn) File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 976, in _validate_conn conn.connect() File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 308, in connect conn = self._new_conn() File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 171, in _new_conn raise NewConnectionError( urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 439, in send resp = conn.urlopen( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 724, in urlopen retries = retries.increment( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilretry.py", line 439, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagestelebotutil.py", line 62, in run task(*args, **kwargs) File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 281, in __retrieve_updates updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout) File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 251, in get_updates json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates) File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 199, in get_updates return _make_request(token, method_url, params=payload) File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 62, in _make_request result = _get_req_session().request(method, request_url, params=params, files=files, File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 530, in request resp = self.send(prep, **send_kwargs) File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 643, in send r = adapter.send(request, **kwargs) File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 516, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение')) " Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 159, in _new_conn conn = connection.create_connection( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 84, in create_connection raise err File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilconnection.py", line 74, in create_connection sock.connect(sa) ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 670, in urlopen httplib_response = self._make_request( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 381, in _make_request self._validate_conn(conn) File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 976, in _validate_conn conn.connect() File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 308, in connect conn = self._new_conn() File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connection.py", line 171, in _new_conn raise NewConnectionError( urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 439, in send resp = conn.urlopen( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3connectionpool.py", line 724, in urlopen retries = retries.increment( File "C:Documentspytelegrambotvenvlibsite-packagesurllib3utilretry.py", line 439, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:/Documents/py/telegrambot/main.py", line 18, in <module> bot.polling() File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 415, in polling self.__threaded_polling(none_stop, interval, timeout) File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 438, in __threaded_polling polling_thread.raise_exceptions() File "C:Documentspytelegrambotvenvlibsite-packagestelebotutil.py", line 81, in raise_exceptions six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2]) File "C:Documentspytelegrambotvenvlibsite-packagessix.py", line 703, in reraise raise value File "C:Documentspytelegrambotvenvlibsite-packagestelebotutil.py", line 62, in run task(*args, **kwargs) File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 281, in __retrieve_updates updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout) File "C:Documentspytelegrambotvenvlibsite-packagestelebot__init__.py", line 251, in get_updates json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates) File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 199, in get_updates return _make_request(token, method_url, params=payload) File "C:Documentspytelegrambotvenvlibsite-packagestelebotapihelper.py", line 62, in _make_request result = _get_req_session().request(method, request_url, params=params, files=files, File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 530, in request resp = self.send(prep, **send_kwargs) File "C:Documentspytelegrambotvenvlibsite-packagesrequestssessions.py", line 643, in send r = adapter.send(request, **kwargs) File "C:Documentspytelegrambotvenvlibsite-packagesrequestsadapters.py", line 516, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1076870220:AAFN6PreEjh-rAL7qPVUjc-qH6uIsTh9WGA/getUpdates?offset=1&timeout=20 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000000414A8B9700>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение')) Process finished with exit code 1 

Уведомления

  • Начало
  • » Python для новичков
  • » Ошибка при запуске кода телеграмм бота

#1 Июнь 30, 2019 12:39:06

Ошибка при запуске кода телеграмм бота

Возникает ошибка:
https://savepice.ru/full/2019/6/30/676eee3f63a0992ff377fd25337b380e-full.png.html

Возникает ошибка: ^
IndentationError: unindent does not match any outer indentation level

C:Python>bot.py
File “C:Pythonbot.py”, line 14
answer += “Температура в данном городе: ” + str(temp) + “nn”
^
IndentationError: unindent does not match any outer indentation level

Используемая ОС: Виндовс 10 64 бит,

Версия Python: 3.7.3

установленные модули: pyowm, pyTelegramBotAPI==0.3.0, pyTelegramBotAPI

Сам код:

 import pyowm import telebot owm = pyowm.OWM('b835a7aae1d1bb2d3516b660bc2019db', language = "ru") bot = telebot.TeleBot("844058209:AAGjEHluy8tTU3G4z64wOtq-HYy7T7T9-uY") @bot.message_handler(content_types=['text']) def send_echo(message): observation = owm.weather_at_place( message.text ) w = observation.get_weather() temp = w.get_temperature('celsius')["temp"] answer = "В городе " + message.text + "сейчас" + w.get_detailed_status() + "n" answer += "Температура в данном городе: " + str(temp) + "nn" if temp < 10: answer += "Одевайся теплее на улице холодно" elif temp < 20: answer += "Можешь одеть что-нибудь полегче, рубашку с джинсами например " else: answer += "Выходи в трусах, там очень тепло" bot.send_message(message.chat.id, answer) bot.polling( none_stop = True ) 

Отредактировано kiryanovik (Июнь 30, 2019 12:43:25)

Офлайн

  • Пожаловаться

#2 Июнь 30, 2019 14:27:09

Ошибка при запуске кода телеграмм бота

А что за дополнительные отступы в первых 4 строчках метода?

Офлайн

  • Пожаловаться

#4 Июнь 30, 2019 17:51:32

Ошибка при запуске кода телеграмм бота

Egorro13
А что за дополнительные отступы в первых 4 строчках метода?

Сейчас вроде разобрался с этой ошибкой, конкретно ее больше не возникает, я просто делал отступы пробелом (вручную) а так оказывается нельзя, надо интером чтоб редактор кода автоматически переносил строки на нужное место — увидел это когда выделил весь код и там подсвечивается где я вручную пробелом щелкал и где редактор кода сам перенес! В общем теперь бот запускается, но проблема теперь в чем то другом)) Я просто уже не понимаю что может быть, весь день сижу)

По ссылке скриншот на ошибку при запуске в cmd, ошибка возникает конкретно когда боту пишешь город для вывода
https://savepice.ru/full/2019/6/30/41618896d17b22a37cec4dd080314a10-full.png.html

Офлайн

  • Пожаловаться

#5 Июнь 30, 2019 17:59:54

Ошибка при запуске кода телеграмм бота

kiryanovik

Можно и пробелом, но чтобы их количество для всех отступов совпадало, обычно по Pep-8 ставится 4 пробела на 1 отступ.

kiryanovik
По ссылке скриншот на ошибку при запуске в cmd, ошибка возникает конкретно когда боту пишешь город для вывода

Как я понимаю, ошибка возникает из-за того, что для бесплатных аккаунтов функция недоступна

Офлайн

  • Пожаловаться

#6 Июнь 30, 2019 18:36:00

Ошибка при запуске кода телеграмм бота

Egorro13

До телеграмма я написал код просто для cmd, с использованием этого же ключа и все работало, а в телеграмме не хочет, плюс я зарегистрировал на owm еще один аккаунт и история таже самая. Не совсем понятно из за чего это происходит

Офлайн

  • Пожаловаться

#7 Июнь 30, 2019 18:37:11

Ошибка при запуске кода телеграмм бота

Egorro13

Или для каких именно аккаунтов вы имеете ввиду ? аккаунт на owm или в телеграмме все же ?

Офлайн

  • Пожаловаться

#8 Июнь 30, 2019 18:40:27

Ошибка при запуске кода телеграмм бота

Egorro13

Что можете порекомендовать взамен owm ? бесплатное конечно же

Офлайн

  • Пожаловаться

#9 Июнь 30, 2019 20:17:23

Ошибка при запуске кода телеграмм бота

kiryanovik
плюс я зарегистрировал на owm еще один аккаунт и история таже самая. Не совсем понятно из за чего это происходит

По ссылке можно увидеть, какие функции доступны бесплатно

kiryanovik
Или для каких именно аккаунтов вы имеете ввиду ? аккаунт на owm или в телеграмме все же ?

На скриншоте мало что можно разобрать из-за картинки и мелкого размера, но все же видно, что исключение выбрасывает именно OWM.

kiryanovik
Что можете порекомендовать взамен owm ? бесплатное конечно же

Порекомендовать не могу — с этим делом еще не сталкивался, просто попытался помочь по смыслу. Возможно, кто-то более опытный что-то посоветует

Офлайн

  • Пожаловаться

#10 Июль 1, 2019 18:02:57

Ошибка при запуске кода телеграмм бота

Egorro13

Спасибо большое) с вашей помощью хоть что то стало понятно!

Офлайн

  • Пожаловаться
  • Начало
  • » Python для новичков
  • » Ошибка при запуске кода телеграмм бота
import configparser import config import telebot from telebot import types #buttons from string import Template bot = telebot.TeleBot(config.token) user_dict = {} class User: def __init__(self, city): self.city = city keys = ['fullname', 'phone'] for key in keys: self.key = None # если /help, /start @bot.message_handler(commands=['start','help']) def send_welcome(message): chat_id = message.chat.id bot.send_message(chat_id, "Здравствуйте." + "{message.from_user.first_name}" + " Я бот! Я могу вам помочь связаться с оператором для консультации.", reply_markup=markup) return(chat_id) markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2) #bot.send_message(message.chat.id, "Здравствуйте. {message.from_user.first_name}" + " Я бот! Я могу вам помочь связаться с оператором для консультации.", chat_id=call, reply_markup=markup) def process_city_step(message): try: chat_id = message.chat.id user_dict[chat_id] = User(message.text) # удалить старую клавиатуру markup = types.ReplyKeyboardRemove(selective=False) msg = bot.send_message(chat_id, 'Как к вам обращаться?', reply_markup=markup) bot.register_next_step_handler(msg, process_fullname_step) except Exception as e: bot.reply_to(message, 'ooops!!') def process_fullname_step(message): try: chat_id = message.chat.id user = user_dict[chat_id] user.fullname = message.text msg = bot.send_message(chat_id, 'Ваш номер телефона') bot.register_next_step_handler(msg, process_phone_step) except Exception as e: bot.reply_to(message, 'ooops!!') def process_phone_step(message): try: int(message.text) chat_id = message.chat.id user = user_dict[chat_id] user.phone = message.text except Exception as e: msg = bot.reply_to(message, 'Вы ввели что то другое. Пожалуйста введите номер телефона.') bot.register_next_step_handler(msg, process_phone_step) def process_social_step(message): try: chat_id = message.chat.id user = user_dict[chat_id] user.carModel = message.text markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) itembtn1 = types.KeyboardButton('Только телефон') itembtn2 = types.KeyboardButton('Telegram') itembtn3 = types.KeyboardButton('Viber') itembtn4 = types.KeyboardButton('WhatsApp') markup.add(itembtn1, itembtn2, itembtn3, itembtn4) msg = bot.send_message(chat_id, 'Ваши соц сети', reply_markup=markup) bot.register_next_step_handler(msg) except Exception as e: bot.reply_to(message, 'ooops!!') # ваша заявка "Имя пользователя" bot.send_message(chat_id, getRegData(user, 'Ваша заявка', message.from_user.first_name), parse_mode="Markdown") # отправить в группу bot.send_message(config.chat_id, getRegData(user, 'Заявка от бота', bot.get_me().username), parse_mode="Markdown") except Exception as e: bot.reply_to(message, 'ooops!!') # формирует вид заявки регистрации # нельзя делать перенос строки Template # в send_message должно стоять parse_mode="Markdown" def getRegData(user, title, name): t = Template('$title *$name* n ФИО: *$fullname* n Телефон: *$phone* ') return t.substitute({ 'title': title, 'name': name, 'fullname': user.fullname, 'phone': user.phone }) # произвольный текст @bot.message_handler(content_types=["text"]) def send_help(message): bot.send_message(message.chat.id, 'О нас - /aboutnРегистрация - /regnПомощь - /help') # Enable saving next step handlers to file "./.handlers-saves/step.save". # Delay=2 means that after any change in next step handlers (e.g. calling register_next_step_handler()) # saving will hapen after delay 2 seconds. bot.enable_save_next_step_handlers(delay=2) # Load next_step_handlers from save file (default "./.handlers-saves/step.save") # WARNING It will work only if enable_save_next_step_handlers was called! bot.load_next_step_handlers() if __name__ == '__main__': bot.polling(none_stop=True)

0 / 0 / 0

Регистрация: 19.07.2022

Сообщений: 5

1

Ошибка в коде Телеграм бота

04.08.2022, 17:46. Показов 1009. Ответов 3


Подскажите пожалуйста в чём причина. Возникает ошибка при запуске бота:

«C:UsersАлександр ВалерьевичAppDataLocalProgramsPythonPython310 python.exe» «C:/Users/Александр Валерьевич/PycharmProjects/telegrambotkafe/newbot.py»
File «C:UsersАлександр ВалерьевичPycharmProjectstelegrambotkafenewbot. py», line 52
bot.polling(none_stop=True, interval=0)
SyntaxError: expected ‘except’ or ‘finally’ block

Process finished with exit code 1

Добавлено через 46 минут

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 
import telebot import random from telebot import types   bot = telebot.TeleBot('5440225403:AAEU8fdNLA_yjZ1FID5BbBE0TcnZKHMz4D0')   #keyboard markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton("Рандомное число") item2 = types.KeyboardButton("Как дела?")   markup.add(item1, item2)   @bot.message_handler(commands=['start']) def welcome(message):     bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!nЯ - <b>{1.first_name}</b>, бот созданный чтобы удивлять.".format(message.from_user, bot.get_me()), parse_mode = 'html', reply_markup=markup)   @bot.message_handler(content_types=['text']) def lalala(message):     if message.chat.type == 'private':         if message.text == 'Рандомное число':             bot.send_message(message.chat.id, str(random.randint(0,100)))         elif message.text == 'Как дела?':               markup = types.InlineKeyboardMarkup(row_width=2)             item1 = types.InlineKeyboardButton("[Хорошо", callback_data='good')             item2 = types.InlineKeyboardButton("[Не очень", callback_data='bad')               markup.add(item1, item2)               bot.send_message(message.chat.id, 'Отлично, сам как?, reply_markup=markup')         else:             bot.send_message(message.chat.id, 'Я не знаю что ответить') @bot.callback_query_handler(func=lambda call: True) def callback_inline(call):     try:         if call.massage:             if caall.data == 'good':                 bot.send_message(call.massage.chat.id, 'Вот и отличненько')             elif call.data == 'bad':                 bot.send_message(call.massage.chat.id, 'Печально')               # remove inline buttons             bot.edit_message_text(chat_id=call.massage.chat.id, message_id=call.massage.massage_id, text="Как дела?",                                   reply_markup=None)             # show alert             bot.answer_callback_query(chat_id=call.massage.chat.id, show_alert=False,                                      text='Это тестовое уведомление!!!1111' )     bot.polling(none_stop=True, interval=0)

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

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

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

  1. Настройка
  2. Hello, bot!
  3. Docker
  4. Деплой на AWS
  5. Заключение

Настройка

Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:

  • свой токен;
  • адрес Telegram API (https://api.telegram.org/bot);
  • ссылку на документацию.

Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.

Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ, например в GitHub-репозиторий .

Далее начните беседу. Введите в поисковой строке имя бота и нажмите /start. Отправьте любое сообщение: оно станет первым обновлением, которое получит Телеграм бот.

Установка Python

Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия важна. Нам подойдет Python не ниже версии 3.7. Если же у вас Linux или macOS, то, скорее всего, у вас стоит Python 3.6. Как обновиться, можете почитать здесь.

Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.

Установка pip

Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip --version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

$ sudo apt-get install python-pip

Установка aiogram

Установить данный фреймворк для Telegram Bot API с помощью pip:

pip install aiogram

Hello, bot!

Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеки и создать экземпляры Телеграм бота и диспетчера:

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
TOKEN = "ваш токен от бота здесь"
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help:

@dp.message_handler(commands=['start', 'help'])
async def send_welcome(msg: types.Message):
await msg.reply_to_message(f‘Я бот. Приятно познакомиться,
{msg.from_user.first_name}’)

Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:

@dp.message_handler(content_types=['text'])
async def get_text_messages(msg: types.Message):
if msg.text.lower() == 'привет':
await msg.answer('Привет!')
else:
await msg.answer('Не понимаю, что это значит.')

Запускаем Telegram бота, написанного на Python, следующим образом:

if __name__ == '__main__':
executor.start_polling(dp)

Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.

Ну вот и всё, простенький бот в Телеграмме на языке Python готов.

Docker

Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:

FROM python:3.8
# set work directory
WORKDIR /usr/src/app/
# copy project
COPY . /usr/src/app/
# install dependencies
RUN pip install --user aiogram
# run app
CMD ["python", "bot.py"]

Каталог проекта должны при этом содержать следующие файлы:

  • bot.py;
  • Dockerfile.

Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:

docker build -t my_app
docker run -d my_app

my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.

-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.

Деплой на AWS

Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:

  1. Локально или с помощью пайплайнов собрали контейнер.
  2. Загрузили его на докер хаб.
  3. В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
  4. Запустили.

Пройдёмся по этим шагам. Везде, где указано <docker_hub_username>, надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.

Билдим контейнер:

docker build -t <docker_hub_username>/my_app

Загружаем его на докерхаб:

docker push <docker_hub_username>/my_app

Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:

docker run -d <docker_hub_username>/my_app

Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.

  • Переходим в Elastic Beanstalk, на вкладку Applications, и создаём новое приложение:

Elastic Beanstalk вкладка Applications

  • Называем приложение, теги оставляем пустыми:

Называем приложение в Elastic Beanstalk

  • Создаём для приложения environment:

environment для будущего Telegram-бота

  • Выбираем Worker environment:

Worker environment для будущего Telegram-бота

  • В качестве платформы выбираем Docker:

Docker для Telegram-бота на Python

  • В пункте Application code нужно загрузить JSON-файл с конфигурацией Docker-образа. Сам файл:
Dockerrun.aws.json
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "<docker_hub_username>/my_app",
"Update": "true"
},
"Ports": [
{
"ContainerPort": 5000,
"HostPort": 8000
}
]
}

Application code

  • Создаём окружение:

Создаём окружение

  • AWS начинает создавать окружение, просто ждём завершения процесса:

AWS начинает создавать окружение

  • Если всё прошло успешно, вы увидите индикатор успешного запуска приложения:

Docker для Телеграм бота

Проверяем работу нашего Telegram bot:

Проверка Телеграм бота

Успех!

Заключение

Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.

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

Кстати, в телеграмме есть аж целых два типа клавиатур:

  1. Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
    RelpyKeyboardMarkup
  2. Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:
    InlineKeyboardMarkup

Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.

В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.

Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.

Реализация собственного обработчика ошибок для Telegram бота.

Внимание! Пакеты python-telegram-bot версии 13.x будут придерживаться многопоточной парадигмы программирования (на данный момент актуальна версия 13.14). Пакеты версий 20.x и новее будут полностью асинхронными и на октябрь 2022 года, первый из них находится в предрелизе. Дополнительно смотрите основные изменения в пакете python-telegram-bot версии 20.x.

В python-telegram-bot все ошибки, связанные с Telegram, инкапсулируются в класс исключения TelegramError и его подклассы, расположенные в модуле telegram.error.

Любая ошибка, включая TelegramError, которая возникает в одном из обработчиков сообщений или при вызове Updater.get_updates(), перенаправляется всем зарегистрированным обработчикам ошибок, чтобы можно было на них отреагировать.

Что бы зарегистрировать обработчик ошибок, необходимо вызвать Dispatcher.add_error_handler(callback), где обратный вызов callback — это функция, которая принимает обновление update и контекст context. Объект update будет обновлением, вызвавшим ошибку (или None, если ошибка не была вызвана update, например, для Jobs), а context.error — возникшей ошибкой.

Пример

: пытаемся отправить сообщение, но пользователь заблокировал бота. Будет вызвано исключение Unauthorized, подкласса TelegramError, которое будет доставлено обработчику ошибок. В обработчике ошибок можно удалить этот контакт из списка контактов бота.

Примечание

. Можно обрабатывать исключения по мере их возникновения. Обработчику ошибок python-telegram-bot перенаправляются только неперехваченные исключения.

Пример собственного обработчика ошибок.

Очень простой пример того, как можно реализовать собственный обработчик ошибок.

import html import json import logging import traceback from telegram import Update, ParseMode from telegram.ext import Updater, CommandHandler logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) # Токен, который получен от @botfather при создании бота BOT_TOKEN = "TOKEN" # Это может быть ваш собственный идентификатор  # или идентификатор группы/канала. # Можно использовать команду `/start` этого бота,  # чтобы увидеть свой идентификатор чата. CHAT_ID = 123456789 # Функция-обработчик ошибок def error_handler(update, context): """  Регистрирует ошибку и уведомляет   разработчика сообщением telegram.  """ # Пишем ошибку, прежде чем что-то делать. Вдруг что-то сломается. logger.error(msg="Исключение при обработке сообщения:", exc_info=context.error) # `traceback.format_exception` возвращает обычное сообщение python  # об исключении в виде списка строк, поэтому объединяем их вместе. tb_list = traceback.format_exception(None, context.error, context.error.__traceback__) tb_string = ''.join(tb_list) # Создаем сообщение с некоторой разметкой и дополнительной  # информацией о том, что произошло. Возможно, придется добавить некоторую  # логику для работы с сообщениями длиной более 4096 символов. update_str = update.to_dict() if isinstance(update, Update) else str(update) message = ( f'Возникло исключение при обработке сообщения.n' f'<pre>update = {html.escape(json.dumps(update_str, indent=2, ensure_ascii=False))}' '</pre>nn' f'<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>nn' f'<pre>context.user_data = {html.escape(str(context.user_data))}</pre>nn' f'<pre>{html.escape(tb_string)}</pre>' ) # Отправляем сообщение разработчику context.bot.send_message(chat_id=CHAT_ID, text=message, parse_mode=ParseMode.HTML) # объект `update` в функции не используется, заменяем его на `_` def bad_command(_, context): """Вызывает ошибку, чтобы вызвать обработчик ошибок.""" context.bot.wrong_method_name() # объект `context` в функции не используется, заменяем его на `_` def start(update, _): update.effective_message.reply_html( 'Принудительный вызов ошибки `/bad_command`n' f'Ваш идентификатор чата <code>{update.effective_chat.id}</code>.' ) if __name__ == '__main__': updater = Updater(BOT_TOKEN) dispatcher = updater.dispatcher # Зарегистрируем команды... dispatcher.add_handler(CommandHandler('start', start)) dispatcher.add_handler(CommandHandler('bad_command', bad_command)) # ...и обработчик ошибок dispatcher.add_error_handler(error_handler) # Запускаем бота updater.start_polling() updater.idle() 

Хороший обработчик ошибок.

Следующий фрагмент кода уведомляет пользователя, когда происходит ошибка, и уведомляет разработчиков об ошибке, включая трассировку и место ее возникновения. Комментарии в коде объясняют, что именно происходит, когда и почему, поэтому редактировать его в соответствии с особыми потребностями должно быть проще простого.

from telegram import ParseMode from telegram.utils.helpers import mention_html import sys import traceback # это общая функция обработчика ошибок.  # Если нужна дополнительная информация о конкретном типе сообщения,  # добавьте ее в полезную нагрузку в соответствующем предложении `if ...` def error(update, context): # добавьте все идентификаторы разработчиков в этот список.  # Можно добавить идентификаторы каналов или групп. devs = [208589966] # Уведомление пользователя об этой проблеме.  # Уведомления будут работать, только если сообщение НЕ является  # обратным вызовом, встроенным запросом или обновлением опроса.  # В случае, если это необходимо, то имейте в виду, что отправка  # сообщения может потерпеть неудачу if update.effective_message: text = "К сожалению произошла ошибка в момент обработки сообщения. " "Мы уже работаем над этой проблемой." update.effective_message.reply_text(text) # Трассировка создается из `sys.exc_info`, которая возвращается в  # как третье значение возвращаемого кортежа. Затем используется  # `traceback.format_tb`, для получения `traceback` в виде строки. trace = "".join(traceback.format_tb(sys.exc_info()[2])) # попробуем получить как можно больше информации из обновления telegram payload = [] # обычно всегда есть пользователь. Если нет, то это  # либо канал, либо обновление опроса. if update.effective_user: bad_user = mention_html(update.effective_user.id, update.effective_user.first_name) payload.append(f' с пользователем {bad_user}') # есть ситуаций, когда что то с чатом if update.effective_chat: payload.append(f' внутри чата <i>{update.effective_chat.title}</i>') if update.effective_chat.username: payload.append(f' (@{update.effective_chat.username})') # полезная нагрузка - опрос if update.poll: payload.append(f' с id опроса {update.poll.id}.') # Поместим это в 'хорошо' отформатированный текст text = f"Ошибка <code>{context.error}</code> случилась{''.join(payload)}. " f"Полная трассировка:nn<code>{trace}</code>" # и отправляем все разработчикам for dev_id in devs: context.bot.send_message(dev_id, text, parse_mode=ParseMode.HTML) # Необходимо снова вызывать ошибку, для того, чтобы модуль `logger` ее записал. # Если вы не используете этот модуль, то самое время задуматься. raise 

Уведомления

  • Начало
  • » Python для новичков
  • » Ошибка при запуске кода телеграмм бота

#1 Июнь 30, 2019 12:39:06

Ошибка при запуске кода телеграмм бота

Возникает ошибка:
https://savepice.ru/full/2019/6/30/676eee3f63a0992ff377fd25337b380e-full.png.html

Возникает ошибка: ^
IndentationError: unindent does not match any outer indentation level

C:Python>bot.py
File “C:Pythonbot.py”, line 14
answer += “Температура в данном городе: ” + str(temp) + “nn”
^
IndentationError: unindent does not match any outer indentation level

Используемая ОС: Виндовс 10 64 бит,

Версия Python: 3.7.3

установленные модули: pyowm, pyTelegramBotAPI==0.3.0, pyTelegramBotAPI

Сам код:

 import pyowm
import telebot
owm = pyowm.OWM('b835a7aae1d1bb2d3516b660bc2019db', language = "ru")
bot = telebot.TeleBot("844058209:AAGjEHluy8tTU3G4z64wOtq-HYy7T7T9-uY")
@bot.message_handler(content_types=['text'])
def send_echo(message):
	observation = owm.weather_at_place( message.text )
	w = observation.get_weather()
	temp = w.get_temperature('celsius')["temp"]
	
	answer = "В городе " + message.text + "сейчас" + w.get_detailed_status() + "n"
    answer += "Температура в данном городе: " + str(temp) + "nn"
	
    if temp < 10:
        answer += "Одевайся теплее на улице холодно" 
    elif temp < 20:
        answer += "Можешь одеть что-нибудь полегче, рубашку с джинсами например " 
    else:
        answer += "Выходи в трусах, там очень тепло" 
  
bot.send_message(message.chat.id, answer)
bot.polling( none_stop = True )

Отредактировано kiryanovik (Июнь 30, 2019 12:43:25)

Офлайн

  • Пожаловаться

#2 Июнь 30, 2019 14:27:09

Ошибка при запуске кода телеграмм бота

А что за дополнительные отступы в первых 4 строчках метода?

Офлайн

  • Пожаловаться

#4 Июнь 30, 2019 17:51:32

Ошибка при запуске кода телеграмм бота

Egorro13
А что за дополнительные отступы в первых 4 строчках метода?

Сейчас вроде разобрался с этой ошибкой, конкретно ее больше не возникает, я просто делал отступы пробелом (вручную) а так оказывается нельзя, надо интером чтоб редактор кода автоматически переносил строки на нужное место — увидел это когда выделил весь код и там подсвечивается где я вручную пробелом щелкал и где редактор кода сам перенес! В общем теперь бот запускается, но проблема теперь в чем то другом)) Я просто уже не понимаю что может быть, весь день сижу)

По ссылке скриншот на ошибку при запуске в cmd, ошибка возникает конкретно когда боту пишешь город для вывода
https://savepice.ru/full/2019/6/30/41618896d17b22a37cec4dd080314a10-full.png.html

Офлайн

  • Пожаловаться

#5 Июнь 30, 2019 17:59:54

Ошибка при запуске кода телеграмм бота

kiryanovik

Можно и пробелом, но чтобы их количество для всех отступов совпадало, обычно по Pep-8 ставится 4 пробела на 1 отступ.

kiryanovik
По ссылке скриншот на ошибку при запуске в cmd, ошибка возникает конкретно когда боту пишешь город для вывода

Как я понимаю, ошибка возникает из-за того, что для бесплатных аккаунтов функция недоступна

Офлайн

  • Пожаловаться

#6 Июнь 30, 2019 18:36:00

Ошибка при запуске кода телеграмм бота

Egorro13

До телеграмма я написал код просто для cmd, с использованием этого же ключа и все работало, а в телеграмме не хочет, плюс я зарегистрировал на owm еще один аккаунт и история таже самая. Не совсем понятно из за чего это происходит

Офлайн

  • Пожаловаться

#7 Июнь 30, 2019 18:37:11

Ошибка при запуске кода телеграмм бота

Egorro13

Или для каких именно аккаунтов вы имеете ввиду ? аккаунт на owm или в телеграмме все же ?

Офлайн

  • Пожаловаться

#8 Июнь 30, 2019 18:40:27

Ошибка при запуске кода телеграмм бота

Egorro13

Что можете порекомендовать взамен owm ? бесплатное конечно же

Офлайн

  • Пожаловаться

#9 Июнь 30, 2019 20:17:23

Ошибка при запуске кода телеграмм бота

kiryanovik
плюс я зарегистрировал на owm еще один аккаунт и история таже самая. Не совсем понятно из за чего это происходит

По ссылке можно увидеть, какие функции доступны бесплатно

kiryanovik
Или для каких именно аккаунтов вы имеете ввиду ? аккаунт на owm или в телеграмме все же ?

На скриншоте мало что можно разобрать из-за картинки и мелкого размера, но все же видно, что исключение выбрасывает именно OWM.

kiryanovik
Что можете порекомендовать взамен owm ? бесплатное конечно же

Порекомендовать не могу — с этим делом еще не сталкивался, просто попытался помочь по смыслу. Возможно, кто-то более опытный что-то посоветует

Офлайн

  • Пожаловаться

#10 Июль 1, 2019 18:02:57

Ошибка при запуске кода телеграмм бота

Egorro13

Спасибо большое) с вашей помощью хоть что то стало понятно!

Офлайн

  • Пожаловаться

  • Начало
  • » Python для новичков
  • » Ошибка при запуске кода телеграмм бота
import configparser
import config
import telebot
from telebot import types #buttons
from string import Template

bot = telebot.TeleBot(config.token)

user_dict = {}

class User:
    def __init__(self, city):
        self.city = city

        keys = ['fullname', 'phone']

        for key in keys:
            self.key = None

# если /help, /start
@bot.message_handler(commands=['start','help'])
def send_welcome(message):
    chat_id = message.chat.id
    bot.send_message(chat_id, "Здравствуйте." + "{message.from_user.first_name}" + " Я бот! Я могу вам помочь связаться с оператором для консультации.", reply_markup=markup)
    return(chat_id)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2) 

#bot.send_message(message.chat.id, "Здравствуйте. {message.from_user.first_name}" + " Я бот! Я могу вам помочь связаться с оператором для консультации.", chat_id=call, reply_markup=markup)

def process_city_step(message):
    try:
        chat_id = message.chat.id
        user_dict[chat_id] = User(message.text)

        # удалить старую клавиатуру
        markup = types.ReplyKeyboardRemove(selective=False)

        msg = bot.send_message(chat_id, 'Как к вам обращаться?', reply_markup=markup)
        bot.register_next_step_handler(msg, process_fullname_step)

    except Exception as e:
        bot.reply_to(message, 'ooops!!')

def process_fullname_step(message):
    try:
        chat_id = message.chat.id
        user = user_dict[chat_id]
        user.fullname = message.text

        msg = bot.send_message(chat_id, 'Ваш номер телефона')
        bot.register_next_step_handler(msg, process_phone_step)

    except Exception as e:
        bot.reply_to(message, 'ooops!!')

def process_phone_step(message):
    try:
        int(message.text)

        chat_id = message.chat.id
        user = user_dict[chat_id]
        user.phone = message.text

    except Exception as e:
        msg = bot.reply_to(message, 'Вы ввели что то другое. Пожалуйста введите номер телефона.')
        bot.register_next_step_handler(msg, process_phone_step)

def process_social_step(message):
    try:
        chat_id = message.chat.id
        user = user_dict[chat_id]
        user.carModel = message.text

        markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
        itembtn1 = types.KeyboardButton('Только телефон')
        itembtn2 = types.KeyboardButton('Telegram')
        itembtn3 = types.KeyboardButton('Viber')
        itembtn4 = types.KeyboardButton('WhatsApp')
        markup.add(itembtn1, itembtn2, itembtn3, itembtn4)

        msg = bot.send_message(chat_id, 'Ваши соц сети', reply_markup=markup)
        bot.register_next_step_handler(msg)

    except Exception as e:
        bot.reply_to(message, 'ooops!!')

        # ваша заявка "Имя пользователя"
        bot.send_message(chat_id, getRegData(user, 'Ваша заявка', message.from_user.first_name), parse_mode="Markdown")
        # отправить в группу
        bot.send_message(config.chat_id, getRegData(user, 'Заявка от бота', bot.get_me().username), parse_mode="Markdown")

    except Exception as e:
        bot.reply_to(message, 'ooops!!')

# формирует вид заявки регистрации
# нельзя делать перенос строки Template
# в send_message должно стоять parse_mode="Markdown"
def getRegData(user, title, name):
    t = Template('$title *$name* n ФИО: *$fullname* n Телефон: *$phone* ')

    return t.substitute({
        'title': title,
        'name': name,
        'fullname': user.fullname,
        'phone': user.phone
    })

# произвольный текст
@bot.message_handler(content_types=["text"])
def send_help(message):
    bot.send_message(message.chat.id, 'О нас - /aboutnРегистрация - /regnПомощь - /help')

# Enable saving next step handlers to file "./.handlers-saves/step.save".
# Delay=2 means that after any change in next step handlers (e.g. calling register_next_step_handler())
# saving will hapen after delay 2 seconds.
bot.enable_save_next_step_handlers(delay=2)

# Load next_step_handlers from save file (default "./.handlers-saves/step.save")
# WARNING It will work only if enable_save_next_step_handlers was called!
bot.load_next_step_handlers()

if __name__ == '__main__':
    bot.polling(none_stop=True)

Понравилась статья? Поделить с друзьями:
  • Ошибка при запуске warhammer 40000 dawn of war
  • Ошибка при запуске апекс легенд 0xc000007b
  • Ошибка при запуске t6sp exe
  • Ошибка при запуске виктория 2
  • Ошибка при запуске вар тандер crash report