Бот на python pyTelegramBotAPI отправляет не то сообщение
После нажатия на KeyBoardButton, отправляется сообщение от пользователя, но бот отправляет не то сообщение, я проверил все условия всё вроде верно, но бот всё равно работает некорректно
Код:
import telebot
from telebot import types
import config
import sqlite3
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS Users (
id INTEGER PRIMARY KEY,
first_name TEXT,
username TEXT,
user_id INTEGER,
chanel_id INTEGER
)
''')
connection.commit()
connection.close()
bot = telebot.TeleBot(config.BOT_TOKEN)
admin_id = 'Admin_id'
user_id = None
photo_yours_chanel = None
caption_yours_anket = None
@bot.message_handler(commands=['start'])
def welcome(message):
this_new_user = registration(message)
if this_new_user == False:
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
cursor.execute('INSERT INTO Users (first_name, user_id) VALUES (?, ?)',
(message.from_user.first_name, message.chat.id,))
connection.commit()
connection.close()
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn_create = types.KeyboardButton('Хочу купить публикацию рекламы?')
btn_post = types.KeyboardButton('Хочу размещать рекламу в своём канале?')
markup.add(btn_create, btn_post)
bot.send_message(message.chat.id, 'Привет!\nДля начала выбери, что тебя интересует:\n*Купить рекламу?\n*Начать размещать рекламу и зарабатывать?', reply_markup=markup)
def registration(message):
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
users_id = cursor.execute('SELECT * FROM Users WHERE user_id = ?', (message.chat.id,)).fetchall()
return bool(users_id)
@bot.message_handler(content_types='text')
def message_processing(message):
if message.text == 'Хочу купить публикацию рекламы?':
markup = types.InlineKeyboardMarkup()
btn_private = types.InlineKeyboardButton(
"Частное (свои вещи)", callback_data="type_private"
)
btn_company = types.InlineKeyboardButton(
"Компания/ИП/Самозанятый", callback_data="type_company"
)
btn_photo = types.InlineKeyboardButton(
"Размещение фото", callback_data="type_photo"
)
btn_media = types.InlineKeyboardButton(
"Размещение видео", callback_data="type_media"
)
btn_link = types.InlineKeyboardButton(
"Размещение текста с ссылкой", callback_data="type_link"
)
markup.add(btn_private, btn_company, btn_photo, btn_link, btn_media)
bot.send_message(
message.chat.id, "Выберите тип объявления:", reply_markup=markup
)
elif message.text == 'Хочу размещать рекламу в своём канале?':
post_markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('готово')
post_markup.add(btn1)
bot.send_message(message.chat.id, 'Для начала назначьте бота администратором в вашем канале/группе и откройте свой username(если он скрыт)\nЕго можно открыть в настройках аккаунта', reply_markup=post_markup)
elif message.text == 'готово':
if message.from_user.username != None:
global user_id
user_id = message.chat.id
user = message.from_user.username
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
cursor.execute('UPDATE Users SET username = ? WHERE user_id = ?', (user, user_id))
bot.send_message(message.chat.id, ' Теперь отправьте команду /start в канал')
connection.commit()
connection.close()
else:
bot.send_message(message.chat.id, 'У вас нет @username, для его создания\n1)зайдите в настройки аккаунта\n2)Нажмите на кнопку "Добавить имя пользователя"\n3)Водите имя в нужную строку\nПосле того как создадите @username пользователя нажмите на кнопку "готово"')
elif message.text == 'Заполнить анкету' or 'Отредактировать анкету':
msg = bot.send_message(message.chat.id, '1.Напишите название вашего телеграм канала\n2.Тематику вашего канала\n3.Цена одной публикации\n4.Описание контента и целевой аудитории\n(Реклама будет публиковаться не чаще чем раз в день)')
bot.register_next_step_handler(msg, lambda msg: process_ad_form_photo(msg, poster=True))
elif message.text == 'Посмотреть анкету?':
global photo_yours_chanel
global caption_yours_anket
markup_anket = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn_post = types.KeyboardButton('Опубликовать анкету')
btn_refactor = types.KeyboardButton('Отредактировать анкету')
markup_anket.add(btn_refactor, btn_post)
bot.send_photo(message.chat.id, photo_yours_chanel, caption=caption_yours_anket + '\nНет рекламодателя')
bot.send_message(message.chat.id, 'Если вам нравится ваша анкета публикуйте её в ленту, а если нет, отредактируйте', reply_markup=markup_anket)
elif message.text == 'Опубликовать анкету':
bot.send_message(message.chat.id, 'Ваша анкета опубликована')
else:
bot.send_message(message.chat.id, 'Неизвестная команда')
@bot.callback_query_handler(func=lambda call: call.data.startswith("type_"))
def callback_type(call):
ad_type = call.data.split("_")[1] # Получаем тип объявления (private, company...)
chat_id = call.message.chat.id # Берем id чата пользователя, а не группы
# Теперь нужно сформировать форму для заполнения объявления
form_message = f"Заполните форму для объявления типа '{ad_type}':\n\n"
if ad_type == "private":
form_message += "Описание товара:\nЦена (если есть, иначе укажите 'бесплатно'):\n(В одном сообщении)"
elif ad_type == "company":
form_message += "Название компании:\nОписание деятельности:\nКонтактная информация:\n(В одном сообщении)"
elif ad_type == "photo":
form_message += "Описание фото(Первым сообщением):\nСамо фото(вторым сообщением):"
mess = bot.send_message(chat_id, form_message)
bot.register_next_step_handler(mess, process_ad_form_photo)
return
elif ad_type == "link":
form_message += "Описание ссылки:\nСама ссылка:\n(В одном сообщении)"
else:
bot.send_message(
chat_id, "Неизвестный тип объявления. Пожалуйста, начните заново."
)
return
bot.send_message(chat_id, form_message)
# Устанавливаем состояние ожидания следующего сообщения от пользователя
bot.register_next_step_handler(call.message, process_ad_form)
@bot.channel_post_handler()
def proccesing_in_chanal(message):
if message.text == '/start':
global user_id
admins = bot.get_chat_administrators(message.chat.id)
for i in admins:
if int(i.user.id) == user_id:
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn_next = types.KeyboardButton('Заполнить анкету')
markup.add(btn_next)
bot.send_message(user_id, 'Отлично! Самое время заполнить анкету вашего канала, чтобы с вами могли связаться рекламодатели.', reply_markup=markup)
bot.send_message(message.chat.id, "Бот настроен!")
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
cursor.execute('UPDATE Users SET chanel_id = ? WHERE user_id = ?', (message.chat.id, user_id,))
connection.commit()
connection.close()
user_id = None
def process_ad_form(message):
chat_id = message.chat.id
text = message.text
bot.send_message(chat_id, text)
def process_ad_form_photo(message, poster = False):
chat_id = message.chat.id
text = message.text
if poster == False:
mesg1 = bot.send_message(chat_id, 'Отлично теперь фото:')
bot.register_next_step_handler(mesg1, lambda mesg1: get_photo(mesg1, text, poster=False))
elif poster == True:
mesg2 = bot.send_message(chat_id, 'Супер теперь скиньте аватарку вашего канала, чтобы ваша анкета выглядела ярче и привлекательнее')
bot.register_next_step_handler(mesg2, lambda mesg2: get_photo(mesg2, text, poster= True))
def get_photo(message, text, poster = False):
global photo_yours_chanel
global caption_yours_anket
img_id = message.photo[-1].file_id
photo_yours_chanel = img_id
caption_yours_anket = text
if poster == True:
markup_poster = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn_wathc = types.KeyboardButton('Посмотреть анкету?')
markup_poster.add(btn_wathc)
bot.send_message(message.chat.id, 'Так теперь тебе нужно посмотреть и выложить анкету', reply_markup=markup_poster)
elif poster == False:
bot.send_photo(message.chat.id, img_id, caption=text)
if __name__ == '__main__':
bot.infinity_polling()