Загрузить файлы в «/»
This commit is contained in:
parent
8069178d24
commit
d71d361c28
46
README.md
46
README.md
@ -1,2 +1,46 @@
|
||||
# S-bot-tg
|
||||
# Telegram Shop Bot
|
||||
Данный репозиторий содержит Telegram-бот, который является интернет-магазином. Он создан с использованием фреймворка Aiogram и обладает следующими функциями: продажа товаров онлайн, inline-меню, поддержка пользователей, отзывы, раздел вопросы-ответы, админ-панель для настройки параметров и база данных SQLite.
|
||||
|
||||
## Требования
|
||||
Для запуска этого бота на локальной машине необходимо установить следующие зависимости:
|
||||
|
||||
- Python 3.7 или выше
|
||||
- Все зависимости, перечисленные в файле requirements.txt
|
||||
|
||||
Вы можете установить необходимые зависимости, выполнив следующую команду:
|
||||
|
||||
```shell
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Конфигурация
|
||||
Перед запуском бота вам необходимо предоставить необходимые настройки конфигурации. Файл конфигурации config.py должен быть заполнен необходимыми значениями. Обязательно обновите следующие настройки:
|
||||
|
||||
- 'BOT_TOKEN': Ваш токен API для Telegram-бота. Вы можете получить его, создав нового бота с помощью BotFather.
|
||||
- Другие параметры конфигурации, такие как настройки базы данных, контакты администраторов и т.д, указаны в файле config.py.
|
||||
|
||||
## Использование
|
||||
После установки зависимостей и заполнения настроек конфигурации вы можете запустить бота файлом main.py:
|
||||
|
||||
```shell
|
||||
python main.py
|
||||
```
|
||||
Бот запущен. Но для бесперебойной работы лучше подойдет режим работы через демона, например, с помощью ``systemd`` на системах с ОС linux
|
||||
|
||||
## Функциональность
|
||||
- **Онлайн-магазин**. Бот позволяет пользователям просматривать и покупать товары онлайн. Он предоставляет интуитивно понятный интерфейс с inline-меню, что облегчает пользователям навигацию и совершение покупок.
|
||||
|
||||
- **Поддержка пользователей**. Пользователи могут обратиться за поддержкой к администратору, задав вопросы
|
||||
|
||||
- **Отзывы**. Пользователи имеют возможность оставлять отзывы о товарах или общем опыте работы с ботом. Эта обратная связь помогает улучшить качество обслуживания и предоставляет ценную информацию как для администратора, так и для других пользователей.
|
||||
|
||||
- **Раздел вопросы-ответы**. Бот включает отдельный раздел для часто задаваемых вопросов (FAQ). Пользователи могут получить доступ к этому разделу, чтобы найти ответы на распространенные вопросы, не обращаясь в поддержку.
|
||||
|
||||
- **Админ-панель**. Для управления настройками и параметрами бота доступна админ-панель. Администраторы могут настраивать различные аспекты бота, такие как список товаров, ценообразование, варианты оплаты и многое другое.
|
||||
|
||||
- **База данных SQLite**. Бот использует базу данных SQLite для хранения и извлечения данных, обеспечивая целостность данных и эффективное управление ими.
|
||||
|
||||
- **И другое...**
|
||||
|
||||
## Лицензия
|
||||
Этот проект лицензируется в соответствии с MIT License. Вы можете свободно использовать, изменять и распространять код в соответствии с условиями лицензии.
|
||||
|
6
personnel.py
Normal file
6
personnel.py
Normal file
@ -0,0 +1,6 @@
|
||||
# Персонал #
|
||||
|
||||
admin_ulr = '' # Тег админа
|
||||
admins = [ХУЙ] # Список ID админов
|
||||
operators = [ХУЙ] # Список ID операторов
|
||||
supporters = [] # Список ID саппортов
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
aiohttp
|
||||
aiogram
|
||||
qrcode
|
66
review.py
Normal file
66
review.py
Normal file
@ -0,0 +1,66 @@
|
||||
from config import dp, db, bot, review_channel_id, review_channel_url
|
||||
from aiogram import types
|
||||
from aiogram.dispatcher import FSMContext
|
||||
from states import ReviewTake
|
||||
from markups import cancel_mkp, menu_mkp
|
||||
from personnel import *
|
||||
from essentials import *
|
||||
|
||||
@dp.callback_query_handler(text_contains='reviews')
|
||||
async def feedchannelmsg(call: types.CallbackQuery):
|
||||
await call.message.answer('Канал с отзывами' +': '+ review_channel_url)
|
||||
|
||||
@dp.callback_query_handler(text_contains='takeotziv_')
|
||||
async def takeotzivcall(call: types.CallbackQuery, state: FSMContext):
|
||||
await call.message.delete()
|
||||
await call.message.answer('Введите оценку от 1 до 5:', reply_markup=cancel_mkp(call.from_user.id))
|
||||
await ReviewTake.OrderId.set()
|
||||
async with state.proxy() as data:
|
||||
data['OrderId'] = call.data.split('_')[1]
|
||||
await ReviewTake.next()
|
||||
|
||||
@dp.message_handler(state=ReviewTake.Stars)
|
||||
async def reviewtakestartmsg(message: types.Message, state: FSMContext):
|
||||
if message.text.isdigit():
|
||||
if int(message.text) > 0 and int(message.text) < 6:
|
||||
async with state.proxy() as data:
|
||||
data['Stars'] = message.text
|
||||
await message.answer('Введите ваш отзыв текстом:', reply_markup=types.InlineKeyboardMarkup(types.InlineKeyboardButton('Отменить', callback_data='cancel')))
|
||||
await ReviewTake.next()
|
||||
else:
|
||||
await message.answer('Введите оценку от 1 до 5:', reply_markup=cancel_mkp(message.from_user.id))
|
||||
else:
|
||||
await message.answer('Введите оценку числом!', reply_markup=cancel_mkp(message.from_user.id))
|
||||
|
||||
@dp.callback_query_handler(text='cancel', state=ReviewTake.Review)
|
||||
@dp.callback_query_handler(text='cancel', state=ReviewTake.Stars)
|
||||
async def reviewtakecancel(call: types.CallbackQuery, state: FSMContext):
|
||||
await call.message.delete()
|
||||
await call.message.answer('Отменено. Вы были возвращены в меню', reply_markup=menu_mkp())
|
||||
await state.finish()
|
||||
|
||||
@dp.message_handler(state=ReviewTake.Review)
|
||||
async def reviewtakereviewmsg(message: types.Message, state: FSMContext):
|
||||
try:
|
||||
stars_list = ['🌟', '🌟', '🌟🌟', '🌟🌟🌟', '🌟🌟🌟🌟', '🌟🌟🌟🌟🌟']
|
||||
async with state.proxy() as data:
|
||||
pass
|
||||
order_id = data['OrderId']
|
||||
stars = data['Stars']
|
||||
goodId = db.get_order_info(int(order_id))[1]
|
||||
goodInfo = db.get_goodinfo(goodId)
|
||||
text = f'Заказ №{order_id}\nТовар: <b>{goodInfo[0]}</b>'
|
||||
if db.get_usernamerev(message.from_user.id):
|
||||
a = db.get_usernamerev(message.from_user.id)
|
||||
b = f'{a[:2]}***{a[-2:]}'
|
||||
await bot.send_message(review_channel_id, f'{text}<b>Пользователь</b>: {b}\n<b>Оценка</b>: {stars_list[int(stars)]}\n<b>Отзыв</b>: {message.text}')
|
||||
else:
|
||||
await bot.send_message(review_channel_id, f'{text}<b>Пользователь</b>: {message.from_user.first_name}\n<b>Оценка</b>: {stars_list[int(stars)]}\n<b>Отзыв</b>: {message.text}')
|
||||
except:
|
||||
for admin in admins:
|
||||
try:
|
||||
await bot.send_message(admin, 'Произошла ошибка при отправлении отзыва в канал')
|
||||
except:
|
||||
pass
|
||||
await message.answer('Спасибо. Вы были возвращены в меню', reply_markup=menu_mkp())
|
||||
await state.finish()
|
Loading…
x
Reference in New Issue
Block a user