Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Телеграмм бот на Python, код выдает ошибку

Kil Ученик (92), на голосовании 2 недели назад
import telebot
from telebot import types
import sqlite3
from datetime import datetime
import os
from dotenv import load_dotenv

# Загрузка токена из переменных окружения для безопасности
load_dotenv()
TOKEN = os.getenv('7619271249:AAGgwfIF8QP4a-HBLltmwTWMKoMGzwFys-I') # Измените на правильное имя переменной окружения
print("Загруженные переменные окружения:", os.environ)
print("Полученный токен:", TOKEN)

# Проверка, был ли токен загружен
if TOKEN is None:
raise ValueError("Токен бота не найден. Проверьте файл .env.")
bot = telebot.TeleBot(TOKEN)


# Инициализация базы данных
def init_db():
conn = sqlite3.connect('service_bot.db')
c = conn.cursor()

# Таблица пользователей
c.execute('''CREATE TABLE IF NOT EXISTS users
(user_id INTEGER PRIMARY KEY,
role TEXT,
username TEXT,
contact_info TEXT)''')

# Таблица заявок
c.execute('''CREATE TABLE IF NOT EXISTS requests
(request_id INTEGER PRIMARY KEY AUTOINCREMENT,
client_id INTEGER,
status TEXT,
description TEXT,
created_at TIMESTAMP)''')

# Таблица ставок
c.execute('''CREATE TABLE IF NOT EXISTS bids
(bid_id INTEGER PRIMARY KEY AUTOINCREMENT,
request_id INTEGER,
executor_id INTEGER,
price REAL,
comment TEXT,
created_at TIMESTAMP)''')

# Таблица чатов
c.execute('''CREATE TABLE IF NOT EXISTS chats
(chat_id INTEGER PRIMARY KEY AUTOINCREMENT,
request_id INTEGER,
client_id INTEGER,
executor_id INTEGER,
status TEXT)''')

conn.commit()
conn.close()

init_db() # Вызов функции инициализации базы данных

# Обработка команды /start
@bot.message_handler(commands=['start'])
def start_message(message):
bot.reply_to(message, "Привет! Я ваш сервисный бот. Используйте команды /register для регистрации и /newrequest для создания заявки.")

# Регистрация пользователей
@bot.message_handler(commands=['register'])
def register_user(message):
markup = types.ReplyKeyboardMarkup(row_width=2)
client_button = types.KeyboardButton('Клиент')
executor_button = types.KeyboardButton('Исполнитель')
markup.add(client_button, executor_button)

msg = bot.reply_to(message, "Кем вы хотите зарегистрироваться?", reply_markup=markup)
bot.register_next_step_handler(msg, process_role_step)

def process_role_step(message):
user_id = message.from_ user.id
role = message.text.lower()

conn = sqlite3.connect('service_bot.db')
c = conn.cursor()
c.execute("INSERT OR REPLACE INTO users (user_id, role, username) VALUES (?, ?, ?)",
(user_id, role, message.from_user.username))
conn.commit()
conn.close()

bot.reply_to(message, f"Вы зарегистрированы как {role}")

и т.д. ошибка где-то в начале
Голосование за лучший ответ
Няшка красовашка Мастер (1586) 1 месяц назад
Ты же явно не для благотворительных целей делаешь его, а для коммерческих. Так почему ты хочешь чтобы за тебя работали за бесплатно?
Анатолий Зяблин Просветленный (31566) 1 месяц назад
Это попробуй
 import telebot  
from telebot import types
import sqlite3
from datetime import datetime
import os
from dotenv import load_dotenv

# Загрузка токена из переменных окружения для безопасности
load_dotenv()
TOKEN = os.getenv('TELEGRAM_BOT_TOKEN') # Убедитесь, что у вас правильное имя переменной окружения

# Проверка, был ли токен загружен
if TOKEN is None:
raise ValueError("Токен бота не найден. Проверьте файл .env.")

bot = telebot.TeleBot(TOKEN)

# Инициализация базы данных
def init_db():
conn = sqlite3.connect('service_bot.db')
c = conn.cursor()

# Таблица пользователей
c.execute('''CREATE TABLE IF NOT EXISTS users
(user_id INTEGER PRIMARY KEY,
role TEXT,
username TEXT,
contact_info TEXT)''')

# Таблица заявок
c.execute('''CREATE TABLE IF NOT EXISTS requests
(request_id INTEGER PRIMARY KEY AUTOINCREMENT,
client_id INTEGER,
status TEXT,
description TEXT,
created_at TIMESTAMP)''')

# Таблица ставок
c.execute('''CREATE TABLE IF NOT EXISTS bids
(bid_id INTEGER PRIMARY KEY AUTOINCREMENT,
request_id INTEGER,
executor_id INTEGER,
price REAL,
comment TEXT,
created_at TIMESTAMP)''')

# Таблица чатов
c.execute('''CREATE TABLE IF NOT EXISTS chats
(chat_id INTEGER PRIMARY KEY AUTOINCREMENT,
request_id INTEGER,
client_id INTEGER,
executor_id INTEGER,
status TEXT)''')

conn.commit()
conn.close()

init_db() # Вызов функции инициализации базы данных

# Обработка команды /start
@bot.message_handler(commands=['start'])
def start_message(message):
bot.reply_to(message, "Привет! Я ваш сервисный бот. Используйте команды /register для регистрации и /newrequest для создания заявки.")

# Регистрация пользователей
@bot.message_handler(commands=['register'])
def register_user(message):
markup = types.ReplyKeyboardMarkup(row_width=2)
client_button = types.KeyboardButton('Клиент')
executor_button = types.KeyboardButton('Исполнитель')
markup.add(client_button, executor_button)

msg = bot.reply_to(message, "Кем вы хотите зарегистрироваться?", reply_markup=markup)
bot.register_next_step_handler(msg, process_role_step)

def process_role_step(message):
user_id = message.from_user.id
role = message.text.lower()

try:
conn = sqlite3.connect('service_bot.db')
c = conn.cursor()

c.execute("INSERT OR REPLACE INTO users (user_id, role, username) VALUES (?, ?, ?)", (user_id, role, message.from_user.username))

conn.commit()

bot.reply_to(message, f"Вы зарегистрированы как {role}")

except sqlite3.Error as e:
print(f"Ошибка при работе с БД: {e}")

finally:
conn.close()

# Запуск бота
bot.polling(none_stop=True)
KilУченик (92) 1 месяц назад
Сработало, можете поделиться контактами, буду рад вашей помощи (не бесплатно)
Анатолий Зяблин Просветленный (31566) Kil, Не стоит на меня так надеяться даже не за бесплатно так как я сделал это не сам, а с помощью нейросети
Вова Тедеев Знаток (259) 1 месяц назад
Давайте разберёмся с вашим кодом. Я вижу, что вы используете библиотеку `telebot` и пытаетесь загрузить токен бота из файла окружения с помощью `dotenv`. Давайте посмотрим на несколько возможных проблем и их решений:

1. **Ошибка в имени переменной окружения**:
- В строке `TOKEN = os.getenv('7619271249:AAGgwfIF8QP4a-HBLltmwTWMKoMGzwFys-I')` вы передаёте токен напрямую в `os.getenv()`, что неправильно. Вместо этого, вы должны указать имя переменной окружения, как, например, `'TELEGRAM_BOT_TOKEN'`.
- Убедитесь, что в вашем файле `.env` переменная окружения определена так: `TELEGRAM_BOT_TOKEN=7619271249:AAGgwfIF8QP4a-HBLltmwTWMKoMGzwFys-I`.

2. **Загрузка переменных окружения**:
- Убедитесь, что файл `.env` находится в той же директории, откуда вы запускаете свой скрипт.
- Проверьте, что `load_dotenv()` корректно загружает переменные. Можно добавить проверку, чтобы убедиться, что файл загружается правильно.

3. **Ошибка в обработчике сообщений**:
- Я заметил ошибку в функции `process_role_step`. В строке `user_id = message.from_ user.id` есть пробел между `from_` и `user`. Это должно быть `message.from_user.id`.
ᅠ ᅠ Гуру (3776) 1 месяц назад
Откуда знать, что у тебя за ошибка?
С помощью GPT- чата написал видимо?
Похожие вопросы