Реализация баланса в Telegram-боте
При создании Telegram-бота на Python столкнулся с проблемой баланса пользователя. Каким образом можно каждому пользователю сделать баланс, или переменную с балансом? Чтобы, к примеру при изменении баланса одного пользователя не менялся баланс второго и т.д. Использую библиотеку pyTelegramBotAPI
Отслеживать
задан 8 янв 2019 в 4:55
1 1 1 бронзовый знак
база данных, не?
8 янв 2019 в 9:31
Сделайте для каждого пользователя отдельный баланс
8 янв 2019 в 18:46
Как пользоваться базой данных?
9 янв 2019 в 4:34
Делать для каждого пользователя баланс — это бессмысленно
9 янв 2019 в 4:35
С Sqlite начните
12 янв 2019 в 23:10
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если пользователей немного и вы хотите только протестировать функционал, самым простым вариантом будет хранить словарь ( dict ), где ключом будет ник пользователя, а значением — баланс. Словарь можно периодически синхронизировать с диском, например, каждые несколько минут, а также при запуске и выходе.
Для более серьёзных проектов нужно будет работать с базой данных. В Python уже есть библиотеки для работы с SQLite, MySQL и другими системами, попробуйте поискать и выбрать ту, которая больше подходит под вашу задачу.
Отслеживать
ответ дан 12 янв 2019 в 18:57
decorator-factory decorator-factory
292 1 1 серебряный знак 9 9 бронзовых знаков
- python
- telegram-bot
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как реализовать баланс в Telegram-боте с помощью БД?
У меня одна проблема. Я пишу Телеграмм-бота на языке Python и у меня возник вопрос в использование Базы Данных. Мне нужно реализовать баланс, отдельно для каждого пользователя. Я понимаю, что тут нужна БД, но я до сих пор не могу понять, каким образом можно это сделать, чтобы потом можно было выводить каждому пользователю его баланс, прибавлять, убавлять и т.д.
Пожалуйста приведите пример использования БД в Телеграм-боте и реализацию в ней баланса. Буду очень благодарен!
Использую библиотеку pyTelegramBotAPI
- Вопрос задан более трёх лет назад
- 3854 просмотра
1 комментарий
Средний 1 комментарий
Как вывести баланс в телеграм боте?
Вот что выводиться в самом боте:
- Вопрос задан более года назад
- 378 просмотров
7 комментариев
Простой 7 комментариев
Пользователь существует в бд?
helldess @helldess Автор вопроса
Dream, да, там при старте бота он автоматически добавляется в бд
helldess, попробуйте в add_user() производить commit вне return
helldess @helldess Автор вопроса
Dream, те self.conn.commit?
helldess @helldess Автор вопроса
Dream, в бд все записывается, но как мне решить проблему с выводом баланса?
helldess @helldess Автор вопроса
Dream, баланс так же выводиться как none
Решения вопроса 0
Ответы на вопрос 1
Значит у тебя нет записи в БД для этого юзера. Ты add_user() точно выполнял для него?
Ответ написан более года назад
helldess @helldess Автор вопроса
ну посмотри код бд, там есть добавление юзера
helldess @helldess Автор вопроса
если бы баланс был нулевой, то он должен выводить 0, я указал по дефолту в таблице
helldess, а теперь еще раз прочитай мой ответ. Внимательно.
Ты add_user() точно выполнял для него?
В приведённом коде нет вызова add_user().
А дефолт в таблице используется при создании новых записей, а не при отсутствии выбираемых.
helldess @helldess Автор вопроса
Vindicar, не понял, можешь пожалуйста отредачить мой код? А то я уже 3 дня не могу разобраться
helldess @helldess Автор вопроса
Vindicar, вот остальная часть всего кода
from aiogram import Bot, Dispatcher, executor, types from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemove from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.dispatcher.filters import Text import sqlite3 from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from db import BotDB BotDB = BotDB('hellshopdb.db') storage = MemoryStorage() bot = Bot(token="5706294916:AAEodg3PKIVwsAQVAwvtwcfC9VlepmM5c2I") dp = Dispatcher(bot, storage=storage) # ======================================Клиентская Часть====================================== @dp.message_handler(commands=['start']) async def command_start(message: types.Message): if (not BotDB.user_exists(message.chat.id)): BotDB.add_user(message.chat.id) await message.answer('Приветствую в HellShop.\nУдачных покупок!', reply_markup=kb_client) @dp.message_handler(commands=['Товары']) @dp.message_handler(Text(equals='Товары', ignore_case=True)) async def command_tovar(message: types.Message): await message.answer('Что вас интересует?', reply_markup=om) @dp.callback_query_handler(text='openmenu') async def openmenu_call(callback: types.CallbackQuery): await callback.answer() @dp.message_handler(commands=['Профиль']) @dp.message_handler(Text(equals='Профиль', ignore_case=True)) async def command_prof(message: types.Message): chat_id = message.from_user.id balance = BotDB.get_balance(chat_id) await message.answer(f' Баланс: ', reply_markup=op) @dp.callback_query_handler(text='openprof') async def openprof_call(callback: types.CallbackQuery): await callback.answer() @dp.message_handler(commands=['Правила']) @dp.message_handler(Text(equals='Правила', ignore_case=True)) async def command_pravila(message: types.Message): await message.answer( '1.1 Вывод средств не осущетсвляется.\n1.2 На товары нет гарантий (замены и возвраты не осуществляются) и магазин не несет ответственности за ваше имущество.\n1.3 Срок выдачи стикеров до 2х минут, в ином случае обращаться в поддержку.\n1.4 Использование багов, а также за скам или попытку скама, оскорбление, за издёвку над админом (если админ посчитает это как унижение или ему будет неприятно) магазин может наказать вас.\n1.5 Тех поддержка отвечает в течение 24 часов, если много писать и навязываться то до 7дней.\n1.6 Незнание правил не освобождает от ответственности\n1.7 Администрация имеет право внести изменения в текст правил, не уведомляя об этом пользователям.') @dp.message_handler(commands=['Инфо']) @dp.message_handler(Text(equals='Инфо', ignore_case=True)) async def command_info(message: types.Message): await message.answer('Выберите действие:', reply_markup=urlkb) # ======================================Админ Часть====================================== # ======================================Кнопки====================================== kb_client = ReplyKeyboardMarkup(resize_keyboard=True) b1 = KeyboardButton('Товары') b2 = KeyboardButton('Профиль') b3 = KeyboardButton('Правила') b4 = KeyboardButton('Инфо') kb_client.add(b1).insert(b2).add(b3).insert(b4) urlkb = InlineKeyboardMarkup(row_width=2, callback_data='openmenu') urlb1 = InlineKeyboardButton(text='⚙Админ/Реклама⚙', url='https://t.me/smurf00') urlb2 = InlineKeyboardButton(text='Тех.поддержка', url='https://t.me/smurf00') urlb3 = InlineKeyboardButton(text='❤Все проекты❤', url='https://t.me/testchathell') urlkb.add(urlb1).insert(urlb2).add(urlb3) om = InlineKeyboardMarkup(row_width=2) om1 = InlineKeyboardButton(text='Накрутка', callback_data='openmenu') om2 = InlineKeyboardButton(text='VPN', callback_data='openmenu') om3 = InlineKeyboardButton(text='Схемы', callback_data='openmenu') om4 = InlineKeyboardButton(text='✉Почты✉', callback_data='openmenu') om.add(om1).insert(om2).add(om3).insert(om4) op = InlineKeyboardMarkup(row_width=2) op1 = InlineKeyboardButton(text='Пополнить', callback_data='openprof') op2 = InlineKeyboardButton(text='История покупок', callback_data='openprof') op.add(op1).add(op2) # ======================================Другое====================================== @dp.message_handler() async def empty(message: types.Message): await message.answer('Неправильная команда') if __name__ == "__main__": executor.start_polling(dp, skip_updates=True)
Как сделать баланс в телеграм боте
Вы активный пользователь Telegram? Не представляете и дня без общения с друзьями и близкими в чатах и группах?
Тогда наш Telegram-бот @clickuz именно для вас!
Он поможет вам оплачивать различные товары и услуги, переводить с карты на карту и многое другое не выходя из любимого Telegram. А его использование очень простое и интуитивно понятное! Всё как вы любите в Telegram.
Что он умеет?
Оплачивайте за услуги и товары огромного количества партнеров системы CLICK. Просто зайдите в раздел «Оплаты» и выберите нужную категорию.
Хотите перевести средства с карты на карту? Узнать баланс карты, или оплатить на местах? В боте это всё уже доступно!
Уникальные возможности @clickuz!
Знакомые попросили пополнить номер мобильного телефона? Просто перешлите сообщение с телефонным номером боту @clickuz (номер телефона должен быть с кодом мобильного оператора). Он автоматически сформирует платеж и запросит сумму пополнения! Вы можете выбрать предложенные варианты суммы или ввести сами. Далее останется только подтвердить платеж.
Также в чате со своими близкими вы можете прямо в чате перевести деньги или запросить перевод. Просто наберите в чате @clickuz и через пробел укажите сумму (например, @clickuz 20000). Бот предложит перевести или запросить данную сумму у собеседника. Далее необходимо просто следовать указаниям бота.
Обратите внимание, что оба собеседника должны быть подключены к боту и системе CLICK для успешного завершения данной операции.
Наш бот @clickuz также постоянно учится быть полезным. Он постоянно анализирует ваши регулярные платежи и в конце месяца предложит заранее оплатить по ним, чтобы вы не остались, например, без мобильной связи или доступа в интернет.
Как подключиться?
Для начала работы найдите его в Telegram через поиск — @clickuz
Необходимо будет выбрать язык, а также выслать ему свой номер телефона в виде контакта. Если вы уже зарегистрированы в системе CLICK, то бот попросит ввести код из направленного вам SMS-сообщения, а также свой CLICK-PIN.
Если же вы еще не были зарегистрированы в системе CLICK, то бот предложит зарегистрироваться и добавить свою пластиковую карту.