Телеграм бот на python, не могу понять что не так.

Статус
Закрыто для дальнейших ответов.

James_Krab

Новичок
Пользователь
Окт 8, 2020
8
0
1
Linux
Python 3.8.6
configparser 5.0.0; pyTelegramBotAPI 3.7.3
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, 'О нас - /about\nРегистрация - /reg\nПомощь - /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)

Python:
token= "Мой токен"
 

MonaCCi

Пользователь
Пользователь
Сен 30, 2020
66
11
8
16
Что именно не работает?
 

James_Krab

Новичок
Пользователь
Окт 8, 2020
8
0
1
Что именно не работает?
ImportError: cannot import name 'types' from 'telebot' (/home/nik/.local/lib/python3.8/site-packages/telebot/__init__.py)
выдаёт эту ошибку

P.s telebot установлен правильно
 

MonaCCi

Пользователь
Пользователь
Сен 30, 2020
66
11
8
16
Используйте pip install pyTelegramBotApi для установки.
 

James_Krab

Новичок
Пользователь
Окт 8, 2020
8
0
1
Используйте "pip install pyTelegramBotApi " для установки
Так говорю же:ROFLMAO:
установленно правильно
 

James_Krab

Новичок
Пользователь
Окт 8, 2020
8
0
1
вы через какую команду устанавливали?
pip3 install pyTelegramBotAPI
 

James_Krab

Новичок
Пользователь
Окт 8, 2020
8
0
1
попробуйте, пожалуйста запустить код у себя, может что то не так только у меня?
 

James_Krab

Новичок
Пользователь
Окт 8, 2020
8
0
1
Используйте pip install pyTelegramBotApi для установки.
Кстати, если удалить telebot, оно запускается, но после первой команды пишет такое:
Код:
2020-10-11 15:05:40,906 (util.py:75 WorkerThread1) ERROR - TeleBot: "UnboundLocalError occurred, args=("local variable 'markup' referenced before assignment",)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 69, in run
    task(*args, **kwargs)
  File "bot.py", line 24, in send_welcome
    bot.send_message(chat_id, "Здравствуйте." + "{message.from_user.first_name}" + " Я бот! Я мого вам помочь связаться с оператором для консультации.", reply_markup=markup)
UnboundLocalError: local variable 'markup' referenced before assignment
"
Traceback (most recent call last):
  File "bot.py", line 123, in <module>
    bot.polling(none_stop=True)
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 427, in polling
    self.__threaded_polling(none_stop, interval, timeout)
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 451, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 118, in raise_exceptions
    six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
  File "/usr/lib/python3/dist-packages/six.py", line 703, in reraise
    raise value
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 69, in run
    task(*args, **kwargs)
  File "bot.py", line 24, in send_welcome
    bot.send_message(chat_id, "Здравствуйте." + "{message.from_user.first_name}" + " Я бот! Я мого вам помочь связаться с оператором для консультации.", reply_markup=markup)
UnboundLocalError: local variable 'markup' referenced before assignment
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Кстати, если удалить telebot, оно запускается, но после первой команды пишет такое:
UnboundLocalError: local variable 'markup' referenced before assignment
Это из-за ошибки в коде.
Вот исправленный метод:
Python:
# если /help, /start
@bot.message_handler(commands=['start','help'])
def send_welcome(message):
    chat_id = message.chat.id
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    bot.send_message(chat_id, "Здравствуйте." + "{message.from_user.first_name}" + " Я бот! Я могу вам помочь связаться с оператором для консультации.", reply_markup=markup)
    return(chat_id)
 

James_Krab

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

Andrey1419

Новичок
Пользователь
Ноя 18, 2020
10
0
1
Добрый день!
Прошу консультации самой изначальной.
Установил Pithon 2.7 .
из
Скачав файлы. см скрин.
Запустил pithon.exe .
Команда
pip install pytelegrambotapi
не проходит . :(
Что требуется ещё установить или настроить?


>>> pip3 install pyTelegramBotAP
File "<stdin>", line 1
pip3 install pyTelegramBotAP
^
SyntaxError: invalid syntax

Piton не видит pyTelegramBotAP . Верно?
как , куда инсталлировать pyTelegramBotAP? откуда качать?

1401.PNG
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 569
456
83
создавайте отдельную тему для вопроса, вам нужно не в интерпретаторе писать pip install pytelegrambotapi, а в командой строке
 

Andrey1419

Новичок
Пользователь
Ноя 18, 2020
10
0
1
вопрос , заданный выше решился. см отдельную тему
инсталляция и первый изначальный запуск Pithon 3.6.7 на Widows10 64разряда

спасибо форумчанам на сопровождение :)(y)
 

Andrey1419

Новичок
Пользователь
Ноя 18, 2020
10
0
1
Пожалуйста, требуется продолжить маленькие консультации на тему

Телеграм бот на python .

Вопрос следующий:

Как назвать файл для импорта библиотеки, в какой папке его сохранить?

import telebot; # Импорт библиотеки

bot = telebot.TeleBot('%ваш токен%'); # Что это за оператор? загрузка токена?


вопросы после решетки не очень важны, но всё же , пожалуйста, покритикуйте.?‍♂️
 

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
импортируемые библиотеки пайтон сам сохраняет, куда ему нужно, об этом не беспокойтесь. токен к каждому боту идет свой, вставляется в скобках как строка.
 
Статус
Закрыто для дальнейших ответов.

Форум IT Специалистов