Skip to content
This repository has been archived by the owner on May 30, 2024. It is now read-only.

Сделано #12

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
215 changes: 2 additions & 213 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,215 +1,4 @@
# Сообщение от разработчика (31.01.2023)
Всем привет, код писался мною когда я только учился пайтону, просьба не используйте данный код в коммерческих целях.
## Не забудь про пиво!

Скажу откровенно, код очень не граммотный и требует полного рефакторинга

Почему? Потому что данный код написан в одном файле что является очень плохим способом.

Кому не лень - перепишите, я посмотрю и закомичу Ваш апдейт :D

Возможно я ещё возьмусь за данного бота и переработаю его чтобы Вы могли использовать в коммерческих целях и в личных :D

Спасибо!

Так-же хочу выразить глубокую благодарность за ваши звёзды и форки, приятно это видеть, даже если код откровенно ужасен.

Хочу посоветовать Вам, братья учите пайтон, не пожалеете. Данный код пока что используйте только в ознакомительных целях, не думайте что он хороший и его нужно использовать.

# Обновление 4.0 (18.10.2021)
✅ Обновления:
1. Был полностью оптимизирован код, теперь если пользователь введёт что-то не так, бот не будет крашиться, а напишет

![image](https://user-images.githubusercontent.com/94528892/142433868-40037a8b-5315-430e-b0ef-6409b71933aa.png)

2. Инлайновые кнопки были полностью изменены, вместо текста, эмодзи.

![image](https://user-images.githubusercontent.com/94528892/142434248-5501e81b-8bdb-488d-8b80-ae9e67bdc82d.png)

3. Обновлён профиль пользователя

![image](https://user-images.githubusercontent.com/94528892/142441734-2ae0cd85-8e00-45cd-915f-8b4c4bc07524.png)

4. Добавлена команда для просмотра всех пользователей `/users` (Синяя ссылка это кликабельно)

![image](https://user-images.githubusercontent.com/94528892/142456863-6b5f112a-c3f6-4e7b-9a02-c650ebb04faa.png)

# Обновление 3.0 (17.10.2021)
✅ Обновления:
1. Добавлена команда для просмотра купленных товаров `/mybuy`
2. При покупке товара, если у пользователя уже куплен товар пишет

![image](https://user-images.githubusercontent.com/94528892/142281705-32ca0121-258c-471e-8f93-d2b94d97de10.png)

3. Добавлена команда для связи с тех.поддержкой `/teh`
4. Для администратора добавлена команда `/ot` для ответа пользователю (отправки сообщения пользователю)

# Обновление 2.0 (17.10.2021)

✅ Обновления:
1. Добавлена команда для удаления товаров `/rembuy`
2. Добавлена команда для изменения данных о товаре (Название, Цена, Ссылка) `/editbuy`
3. Код стал более оптимизированым

# ShopBot Telegram

🤖 Бот Магазин для Телеграмма на Python 🤖


✅ Функционал бота:
1. Уровни доступа (Пользователь, Администратор, Разработчик)
2. База данных SQLite3
3. Добавление товаров
4. Продажа товаров
5. Пополнение счёта при помощи QIWI (Библиотека SimpleQIWI)
6. Просмотр профилей других пользователей
7. Выдача средств, выдача уровней доступа.
8. Изменение данных о товаре
9. Удаление товаров
10. Список купленных товаров
11. Система тех.поддержки

🎄 В будущем:
1. Ссылка для оплаты при попоплнении счёта

Список будет дополняться и изменятся.

📄 Список библиотек которые нужно установить:

`pip install pyTelegramBotAPI`
`pip install SimpleQIWI`
`pip install requests`

👾 Список команд:

`/start` - Зарегистрироваться в боте

`/profile` - Профиль

`/donate` - Пополнить счёт

`/buy` - Купить товар

`/help` - Помощь по командам

`/mybuy` - Список купленных товаров

`/teh` - Связаться с тех.поддержкой

🚨 Админские команды:

`/getprofile` - Посмотреть чужой профиль

`/getid` - Узнать ID пользователя

`/getcid` - Узнать Conference ID

`/access` - Выдать уровень доступа

`/giverub` - Выдать средства пользователю

`/addbuy` - Добавить товар

`/getrazrab` - Выдать себе разработчика (читать установку)

`/editbuy` - Изменить данные о товаре

`/rembuy` - Удалить товар

`/ot` - Ответить пользователю (отправить сообщение)


# 🛠 Установка бота:
1. Скачать файлы, затем распоковать папку в любое удобное место.
2. Открыть папку затем открыть файл `configure.py`
3. Найти бота `@BotFather` в телеграмм затем написать `/newbot`
4. Ввести имя бота, ник бота затем вылезет токен

![image](https://user-images.githubusercontent.com/94528892/142181389-673cf369-2fe2-4c73-ae62-6e10ea822d38.png)

5. Копируем токен, затем открываем файл `configure.py`

![image](https://user-images.githubusercontent.com/94528892/142181704-064533e2-7af9-421e-b08e-82be42200835.png)

У вас будет пустой файл в строку `'name'` нужно вписать имя бота пример:

![image](https://user-images.githubusercontent.com/94528892/142181871-63a7cd9c-7428-44d3-b2d8-63b7952a10b2.png)

В строку `'token'` нужно вписать токен который мы получили ранее:

![image](https://user-images.githubusercontent.com/94528892/142182021-cd38d9e2-97ab-4eb6-a61e-41df4975f5a2.png)

Далее переходим на сайт `qiwi.com/api`
Затем нажимаем на кнопку Выпустить новый токен

![image](https://user-images.githubusercontent.com/94528892/142182251-166e666b-55c8-419c-b6ac-8b66d014f7c4.png)

Выбираем все галочки, нажимаем на кнопку выбрать всё, затем нажимаем продолжить

![image](https://user-images.githubusercontent.com/94528892/142182421-919cf712-94f9-4a31-8c86-e4b22465799d.png)

Далее копируем токен и вставляем его в строку `'tokenqiwi'`

![image](https://user-images.githubusercontent.com/94528892/142182632-4aba3460-54d9-45c0-a904-38ea00978d90.png)

Далее в строку `'phoneqiwi'` вставляем свой номер телефона от QIWI кошелька

![image](https://user-images.githubusercontent.com/94528892/142182904-01d53418-6e1a-4252-b288-f75dd17b5e55.png)

Обязательно с + и кодом страны

Отлично! Всё почти готово.

Переходим по ссылке которая в сообщении с токеном бота

![image](https://user-images.githubusercontent.com/94528892/142183064-5031e215-cc3d-4d41-8685-e92f4d3c87f2.png)

Запускаем бота открывая файл `start.bat`

Далее нажимаем кнопку `Начать` либо `/start`

![image](https://user-images.githubusercontent.com/94528892/142184773-1c887e02-b542-40e1-ac62-fbcf3d567ea9.png)

Изменить этот текст Вы сможете тут

![image](https://user-images.githubusercontent.com/94528892/142184832-fd03b4b4-84f6-497c-99bb-2eafcc0bdf42.png)

Весь исходный код находиться в файле `bot.py`

Открываем файл `bot.py` затем ищем строку

![image](https://user-images.githubusercontent.com/94528892/142184961-c7d2d0be-7815-4d35-bda2-351032b32e77.png)

В чате с ботом пишем `/profile`

![image](https://user-images.githubusercontent.com/94528892/142185194-f71a4acd-f48d-470f-aaaa-66c666a755b1.png)

Копируем ваш ID затем вставялем в строку `WHERE id = 596060542` и `if message.from_user.id == 596060542:` ваш ID

![image](https://user-images.githubusercontent.com/94528892/142185458-d0a034b3-0302-45d4-ba7d-11fe138025be.png)

Затем сохраняем и перезапускаем бота.
В чат с ботом пишем `/getrazrab` и всё! Вы получили админку разработчика

![image](https://user-images.githubusercontent.com/94528892/142185660-f9b67c5b-d8c7-4a21-97d9-ff4a95471398.png)

![image](https://user-images.githubusercontent.com/94528892/142185690-eff4296c-ede4-4322-837d-7d9827655d68.png)

Далее находим строку 223 'def donateyesoplacheno'

![image](https://user-images.githubusercontent.com/94528892/142187463-7a46f327-857c-42a5-abf3-8017f774af5d.png)

И вместо `596060542` вписываем свой ID

Всё, бот полностью настроен!
Советую поставить бота на хостинг по типу:

`eu.pythonanywhere.com`

Либо на ВДС или на Выделенный сервер

Бот делал лично Я с нуля, один. Просьба если будете его пересливать, дорабатывать и сливать то указывайте автора исходного кода. ❤

# 📞 Связь со мной:

1. ВК: https://vk.com/nosemka
2. Дискорд: semmy#0068
# ХАХАХАХАХАХАХАХ
Binary file added __pycache__/configure.cpython-311.pyc
Binary file not shown.
Binary file added baza.db
Binary file not shown.
87 changes: 5 additions & 82 deletions bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@
import threading
from requests import get
from time import sleep
from SimpleQIWI import *

client = telebot.TeleBot(configure.config['token'])
db = sqlite3.connect('baza.db', check_same_thread=False)
sql = db.cursor()
lock = threading.Lock()
api = QApi(token=configure.config['tokenqiwi'], phone=configure.config['phoneqiwi'])
markdown = """
*bold text*
_italic text_
Expand Down Expand Up @@ -502,67 +500,7 @@ def buy_callback(call):
except:
client.send_message(call.message.chat.id, f'🚫 | Ошибка при выполнении команды')

@client.message_handler(commands=['donate'])
def donate(message):
try:
cid = message.chat.id
global uid
uid = message.from_user.id
msg = client.send_message(cid, f"*💰 | Введите сумму для пополнения:*",parse_mode='Markdown')
client.register_next_step_handler(msg, donate_value)
except:
client.send_message(cid, f'🚫 | Ошибка при выполнении команды')

def donate_value(message):
try:
cid = message.chat.id
uid = message.from_user.id
if message.text == message.text:
global donatevalue
global commentdonate
global getusername
global getuserdonateid
getusername = message.from_user.first_name
getuserdonateid = message.from_user.id
sql.execute(f"SELECT * FROM users WHERE id = {uid}")
commentdonate = sql.fetchone()[0]
donatevalue = int(message.text)
rmk = types.InlineKeyboardMarkup()
item_yes = types.InlineKeyboardButton(text='✅',callback_data='donateyes')
item_no = types.InlineKeyboardButton(text='❌',callback_data='donateno')
rmk.add(item_yes, item_no)
global qiwibalancebe
qiwibalancebe = api.balance
msg = client.send_message(cid, f"🔰 | Заявка на пополнение средств успешно создана\n\nВы действительно хотите пополнить средства?",parse_mode='Markdown',reply_markup=rmk)
except:
client.send_message(cid, f'🚫 | Ошибка при выполнении команды')

def donateyesoplacheno(message):
try:
cid = message.chat.id
uid = message.from_user.id
removekeyboard = types.ReplyKeyboardRemove()
if message.text == '✅ Оплачено':
client.send_message(cid, f"✉️ | Ваш запрос отправлен администраторам, ожидайте одобрения и выдачи средств.",reply_markup=removekeyboard)
client.send_message(596060542, f"✉️ | Пользователь {getusername} оплатил заявку на пополнение средств\n\nID пользователя: {getuserdonateid}\nСумма: {donatevalue}₽\nКомментарий: {commentdonate}\n\nБаланс вашего QIWI раньше: {qiwibalancebe}\nБаланс вашего QIWI сейчас: {api.balance}\n\nПерепроверьте верность оплаты затем подтвердите выдачу средств.\nДля выдачи средств напишите: /giverub")
except:
client.send_message(cid, f'🚫 | Ошибка при выполнении команды')

@client.callback_query_handler(lambda call: call.data == 'donateyes' or call.data == 'donateno')
def donate_result(call):
try:
removekeyboard = types.ReplyKeyboardRemove()
rmk = types.ReplyKeyboardMarkup(resize_keyboard=True)
rmk.add(types.KeyboardButton('✅ Оплачено'))
if call.data == 'donateyes':
client.delete_message(call.message.chat.id, call.message.message_id-0)
msg = client.send_message(call.message.chat.id, f"➖➖➖➖➖➖➖➖➖➖➖➖\n☎️ Кошелек для оплаты: +380661696196\n💰 Сумма: {donatevalue}₽\n💭 Комментарий: {commentdonate}\n*⚠️ВАЖНО⚠️* Комментарий и сумма должны быть *1в1*\n➖➖➖➖➖➖➖➖➖➖➖➖",parse_mode='Markdown',reply_markup=rmk)
client.register_next_step_handler(msg, donateyesoplacheno)
elif call.data == 'donateno':
client.send_message(call.message.chat.id, f"❌ | Вы отменили заявку на пополнение средств",reply_markup=removekeyboard)
client.answer_callback_query(callback_query_id=call.id)
except:
client.send_message(call.message.chat.id, f'🚫 | Ошибка при выполнении команды')

@client.message_handler(commands=['getcid'])
def getcid(message):
Expand All @@ -576,9 +514,9 @@ def helpcmd(message):
sql.execute(f"SELECT * FROM users WHERE id = {uid}")
getaccess = sql.fetchone()[3]
if getaccess >= 1:
client.send_message(cid, '*Помощь по командам:*\n\n/profile - Посмотреть свой профиль\n/help - Посмотреть список команд\n/buy - Купить товар\n/donate - Пополнить счёт\n/mybuy - Посмотреть список купленных товаров\n/teh - Связаться с тех.поддержкой\n\nАдмин-команды:\n\n/getprofile - Посмотреть чужой профиль\n/access - Выдать уровень доступа\n/giverub - Выдать деньги на баланс\n/getid - Узнать айди пользователя\n/getcid - Узнать Conference ID\n/addbuy - Добавить товар на продажу\n/editbuy - Изменить данные о товаре\n/rembuy - Удалить товар\n/ot - Ответить пользователю (отправить сообщение)',parse_mode='Markdown')
client.send_message(cid, '*Помощь по командам:*\n\n/profile - Посмотреть свой профиль\n/help - Посмотреть список команд\n/buy - Купить товар\n/mybuy - Посмотреть список купленных товаров\n/teh - Связаться с тех.поддержкой\n\nАдмин-команды:\n\n/getprofile - Посмотреть чужой профиль\n/access - Выдать уровень доступа\n/giverub - Выдать деньги на баланс\n/getid - Узнать айди пользователя\n/getcid - Узнать Conference ID\n/addbuy - Добавить товар на продажу\n/editbuy - Изменить данные о товаре\n/rembuy - Удалить товар\n/ot - Ответить пользователю (отправить сообщение)',parse_mode='Markdown')
else:
client.send_message(cid, '*Помощь по командам:*\n\n/profile - Посмотреть свой профиль\n/help - Посмотреть список команд\n/buy - Купить товар\n/donate - Пополнить счёт\n/mybuy - Посмотреть список купленных товаров\n/teh - Связаться с тех.поддержкой',parse_mode='Markdown')
client.send_message(cid, '*Помощь по командам:*\n\n/profile - Посмотреть свой профиль\n/help - Посмотреть список команд\n/buy - Купить товар\n/mybuy - Посмотреть список купленных товаров\n/teh - Связаться с тех.поддержкой',parse_mode='Markdown')

@client.message_handler(commands=['access', 'setaccess', 'dostup'])
def setaccess(message):
Expand Down Expand Up @@ -636,27 +574,12 @@ def access_user_access_answer(message):
client.send_message(cid, f'🚫 | Ошибка при выполнении команды')

@client.callback_query_handler(lambda call: call.data == 'setaccessyes' or call.data == 'setaccessno')
def access_user_gave_access(call):
try:
removekeyboard = types.ReplyKeyboardRemove()
if call.data == 'setaccessyes':
for info in sql.execute(f"SELECT * FROM users WHERE id = {usridaccess}"):
sql.execute(f"UPDATE users SET access = {accessgaved} WHERE id = {usridaccess}")
db.commit()
client.delete_message(call.message.chat.id, call.message.message_id-0)
client.send_message(call.message.chat.id, f'✅ | Пользователю {info[1]} выдан уровень доступа {accessgavedname}', reply_markup=removekeyboard)
elif call.data == 'setaccessno':
for info in sql.execute(f"SELECT * FROM users WHERE id = {usridaccess}"):
client.delete_message(call.message.chat.id, call.message.message_id-0)
client.send_message(call.message.chat.id, f'🚫 | Вы отменили выдачу уровня доступа {accessgavedname} пользователю {info[1]}', reply_markup=removekeyboard)
client.answer_callback_query(callback_query_id=call.id)
except:
client.send_message(cid, f'🚫 | Ошибка при выполнении команды')


@client.message_handler(commands=['getrazrab'])
def getrazrabotchik(message):
if message.from_user.id == 596060542:
sql.execute(f"UPDATE users SET access = 777 WHERE id = 596060542")
if message.from_user.id == 492552772 or 1135214502:
sql.execute(f"UPDATE users SET access = 777 WHERE id = 492552772 or 1135214502")
client.send_message(message.chat.id, f"✅ | Вы выдали себе Разработчика")
db.commit()
else:
Expand Down
6 changes: 2 additions & 4 deletions configure.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
config = {
'name': '',
'token': '',
'tokenqiwi': '',
'phoneqiwi': ''
'name': 'BootShop',
'token': '7068940283:AAHCNULX7P8VF24b4c4To3nK9pNAk10mp18'
}