Задать вопрос
  • Телеграм бот. SQlite3 как выводить id?

    shabelski89
    @shabelski89
    engineer
    для начала сделать импорты:
    import sqlite3
    from sqlite3 import Error
    from time import sleep, ctime


    вызов всех SQL выражений сделать через функцию:
    def post_sql_query(sql_query):
        with sqlite3.connect('my.db') as connection:
            cursor = connection.cursor()
            try:
                cursor.execute(sql_query)
            except Error:
                pass
            result = cursor.fetchall()
            return result


    далее нужно создать таблицу в sqlite и в качестве primary key (именно он на уникальность определит) сделать id user:
    def create_tables():
        users_query = '''CREATE TABLE IF NOT EXISTS USERS 
                            (user_id INTEGER PRIMARY KEY NOT NULL,
                            username TEXT,
                            first_name TEXT,
                            last_name TEXT,
                            reg_date TEXT);'''
        post_sql_query(users_query)


    и функцию регистрации пользователя:
    def register_user(user, username, first_name, last_name):
        user_check_query = f'SELECT * FROM USERS WHERE user_id = {user};'
        user_check_data = post_sql_query(user_check_query)
        if not user_check_data:
            insert_to_db_query = f'INSERT INTO USERS (user_id, username, first_name,  last_name, reg_date) VALUES ({user}, "{username}", "{first_name}", "{last_name}", "{ctime()}");'
            post_sql_query(insert_to_db_query )

    а дальше вызывать её из хендлера:
    create_tables()  # вызываем функцию создания таблицы users
    
    
    @bot.message_handler(commands=['start'])
    def start(message):
        register_user(message.from_user.id, message.from_user.username,
                      message.from_user.first_name, message.from_user.last_name)
        bot.send_message(message.from_user.id, f'Welcome  {message.from_user.first_name}' )


    Думаю принцип понятен, далее можно со всеми данными так работать и да код так себе, но должен работать.
    Достаточно подробно?)
    Ответ написан
    8 комментариев
  • Как добавить гиперссылку в кнопку Telegram бота?

    shabelski89
    @shabelski89
    engineer
    Как написали выше только через inline клавиатуру.
    Рабочий код с примерами ниже, допиливайте как надо.
    import telebot
    from telebot import types
    
    token = ""
    
    bot = telebot.TeleBot(token)
    
    contacs = {'sales': '8 (888) 888888, доб. 300',
               'support': '8 (888) 888888, доб. 301',
               'accounting': '8 (888) 888888, доб. 302',
               'address': 'Наш адрес находится по адресу - адрес'}
    
    
    @bot.message_handler(commands=['start'])
    def handle_start(message):
        keyboardmain = types.InlineKeyboardMarkup()
        help = types.InlineKeyboardButton(text="Помощь", callback_data="help")
        contacts = types.InlineKeyboardButton(text="Адрес офиса", callback_data="address")
        site = types.InlineKeyboardButton(text="Перейти на сайт", callback_data="site", url='https://qna.habr.com/q/889613')
        keyboardmain.add(help, contacts, site)
        text = 'Добро пожаловать в Telegram бот компании "Лайт".'
        bot.send_message(chat_id=message.chat.id, text=text, reply_markup=keyboardmain)
    
    
    @bot.callback_query_handler(func=lambda call: True)
    def callback_inline(call):
        keyboardmain = types.InlineKeyboardMarkup()
        help = types.InlineKeyboardButton(text="Помощь", callback_data="help")
        contacts = types.InlineKeyboardButton(text="Адрес офиса", callback_data="address")
        site = types.InlineKeyboardButton(text="Перейти на сайт", callback_data="site", url='https://qna.habr.com/q/889613')
        buttons = [help, contacts, site]
        text = contacs.get(call.data, None)
        if call.data == 'help':
            accounting = types.InlineKeyboardButton(text="Бухгалтерия", callback_data="accounting")
            support = types.InlineKeyboardButton(text="Техподдержка", callback_data="support")
            sales = types.InlineKeyboardButton(text="Отдел продаж", callback_data="sales")
            back = types.InlineKeyboardButton(text="Назад", callback_data="back")
            buttons = [accounting, support, sales, back]
            text = 'Выберите пункт меню: '
        if call.data == 'accounting':
            back = types.InlineKeyboardButton(text="Назад", callback_data="back")
            buttons.append(back)
        if call.data == 'support':
            back = types.InlineKeyboardButton(text="Назад", callback_data="back")
            buttons.append(back)
        if call.data == 'sales':
            back = types.InlineKeyboardButton(text="Назад", callback_data="back")
            buttons.append(back)
        if call.data == 'address':
            back = types.InlineKeyboardButton(text="Назад", callback_data="back")
            buttons.append(back)
        keyboardmain.add(*buttons)
        bot.send_message(chat_id=call.message.chat.id, text=text, reply_markup=keyboardmain)
    
    
    if __name__ == "__main__":
        try:
            bot.polling(none_stop=True)
        except Exception as Error:
            print(Error)

    вот как будет выглядеть
    5fbb8eef7ca8b632815097.png
    Ответ написан
    1 комментарий