Compare commits
44 Commits
98136d93a2
...
v1.0.1
Author | SHA1 | Date | |
---|---|---|---|
1274909088 | |||
bd3b859add | |||
6fa27c175f | |||
530c9c96fd | |||
0c3ac88812 | |||
ad9dce9a89 | |||
65531336ad | |||
169e9c36a9 | |||
9d8d1d0fdd | |||
bd82a7c1a7 | |||
fc50d21ab2 | |||
ce4c89aa8d | |||
b6b6d0e6aa | |||
bf36286307 | |||
7113f914c5 | |||
b686d39818 | |||
166b2bd8ef | |||
f9217fd736 | |||
26ac8ddc90 | |||
2c18fec1f6 | |||
08fc8f56e7 | |||
f26f7cce37 | |||
b313b15686 | |||
aacb413176 | |||
efc711cd3b | |||
b77f1bc13d | |||
55f17606d6 | |||
e0c9aad35a | |||
8c558f7bc0 | |||
a66fde985f | |||
f97a8286b7 | |||
1dfd81de31 | |||
20eaea722f | |||
ee834376db | |||
ca6ac97e33 | |||
be430673f1 | |||
2dc6327fe1 | |||
221ff51d3d | |||
0fc4d0df82 | |||
fe897a596c | |||
2bc65d37dd | |||
cc206ff358 | |||
9065115927 | |||
db629bb804 |
58
.drone.yml
58
.drone.yml
@ -1,10 +1,58 @@
|
|||||||
|
# ---
|
||||||
|
# kind: pipeline
|
||||||
|
# type: docker
|
||||||
|
# name: deploy-to-docker-vm
|
||||||
|
# clone:
|
||||||
|
# disable: true
|
||||||
|
|
||||||
|
# steps:
|
||||||
|
# - name: greeting
|
||||||
|
# image: appleboy/drone-ssh
|
||||||
|
# settings:
|
||||||
|
# host:
|
||||||
|
# from_secret: docker_host
|
||||||
|
# username:
|
||||||
|
# from_secret: docker_user
|
||||||
|
# key:
|
||||||
|
# from_secret: docker_privkey
|
||||||
|
# port: 2200
|
||||||
|
# script:
|
||||||
|
# - whoami
|
||||||
|
# - uname -a
|
||||||
|
# - mkdir -p deploy; cd deploy
|
||||||
|
# - git clone https://gitea.gavt45.ru/gav/es-bot.git
|
||||||
|
# - cd es-bot
|
||||||
|
# - git checkout main
|
||||||
|
# - docker-compose build
|
||||||
|
# when:
|
||||||
|
# branch:
|
||||||
|
# - main
|
||||||
|
|
||||||
|
# ---
|
||||||
|
# kind: pipeline
|
||||||
|
# type: docker
|
||||||
|
# name: test-secrets-pipeline
|
||||||
|
|
||||||
|
# steps:
|
||||||
|
# - name: test-secrets
|
||||||
|
# image: alpine
|
||||||
|
# environment:
|
||||||
|
# HOST:
|
||||||
|
# from_secret: docker_host
|
||||||
|
# commands:
|
||||||
|
# - env
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
type: docker
|
type: docker
|
||||||
name: default
|
name: default
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: greeting
|
- name: docker
|
||||||
image: alpine
|
image: plugins/docker
|
||||||
commands:
|
settings:
|
||||||
- echo hello
|
auto_tag: true
|
||||||
- echo world
|
registry: registry.gavt45.ru
|
||||||
|
username:
|
||||||
|
from_secret: docker_username
|
||||||
|
password:
|
||||||
|
from_secret: docker_password
|
||||||
|
repo: registry.gavt45.ru/es-bot
|
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jpg filter=lfs diff=lfs merge=lfs -text
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,6 @@
|
|||||||
*__pycache__*
|
*__pycache__*
|
||||||
tmp
|
tmp
|
||||||
|
.env
|
||||||
|
docker-compose-dev.yml
|
||||||
|
*.DS_Store*
|
||||||
|
.idea/
|
||||||
|
@ -2,3 +2,4 @@ from .menu import menu_router
|
|||||||
from .test import test_router
|
from .test import test_router
|
||||||
from .teacher import teacher_router
|
from .teacher import teacher_router
|
||||||
from .student import student_router
|
from .student import student_router
|
||||||
|
from .man import man_router
|
||||||
|
19
blueprints/man.py
Normal file
19
blueprints/man.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadContainsFilter, BotEvent, \
|
||||||
|
EventTypeFilter
|
||||||
|
from vkwave.types.bot_events import BotEventType
|
||||||
|
|
||||||
|
import locales
|
||||||
|
|
||||||
|
man_router = DefaultRouter()
|
||||||
|
|
||||||
|
|
||||||
|
@man_router.registrar.with_decorator(
|
||||||
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
||||||
|
PayloadContainsFilter("man"),
|
||||||
|
)
|
||||||
|
async def man_menu(event: BotEvent):
|
||||||
|
sevent = SimpleBotEvent(event)
|
||||||
|
return await sevent.answer(
|
||||||
|
message=locales.MAN,
|
||||||
|
keyboard=locales.MAN_KB.get_keyboard(),
|
||||||
|
)
|
@ -1,43 +1,21 @@
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import random
|
|
||||||
|
|
||||||
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadFilter, PayloadContainsFilter, \
|
from vkwave.bots import DefaultRouter, SimpleBotEvent, PayloadContainsFilter
|
||||||
PhotoUploader, Storage
|
from vkwave.bots import Keyboard
|
||||||
from vkwave.bots import Keyboard, ButtonColor
|
|
||||||
from vkwave.bots import EventTypeFilter, BotEvent
|
from vkwave.bots import EventTypeFilter, BotEvent
|
||||||
from vkwave.types.bot_events import BotEventType
|
from vkwave.types.bot_events import BotEventType
|
||||||
from vkwave.bots.fsm import FiniteStateMachine, StateFilter, ForWhat, State, ANY_STATE
|
|
||||||
|
|
||||||
import locales
|
import locales
|
||||||
import util
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from db import DB
|
from db import DB
|
||||||
from db.db import TestResult
|
|
||||||
from locales import INPUT_NAME_TEXT
|
|
||||||
|
|
||||||
|
|
||||||
# MENU_KB.add_row()
|
|
||||||
# MENU_KB.add_text_button(text="Профиль", payload={"command": "profile"}, color=ButtonColor.SECONDARY)
|
|
||||||
# MENU_KB.add_row()
|
|
||||||
# MENU_KB.add_text_button(text="Бонус", payload={"command": "bonus"}, color=ButtonColor.POSITIVE)
|
|
||||||
# from nft_things.NftSender import NFTSender
|
|
||||||
from util.redis_db import RedisDB
|
from util.redis_db import RedisDB
|
||||||
from util.nft_util import get_image
|
from util.nft_util import get_image
|
||||||
|
|
||||||
test_router = DefaultRouter()
|
test_router = DefaultRouter()
|
||||||
|
|
||||||
|
EMPTY_KB = '{"buttons": [], "inline": false, "one_time": false}'
|
||||||
|
|
||||||
# # exiting from poll (works on any state)
|
|
||||||
# @test_router.registrar.with_decorator(
|
|
||||||
# lambda event: event.object.object.message.text == "exit",
|
|
||||||
# StateFilter(fsm=fsm, state=ANY_STATE, for_what=ForWhat.FOR_USER)
|
|
||||||
# )
|
|
||||||
# async def simple_handler(event: BotEvent):
|
|
||||||
# # Check if we have the user in database
|
|
||||||
# if await fsm.get_data(event, for_what=ForWhat.FOR_USER) is not None:
|
|
||||||
# await fsm.finish(event=event, for_what=ForWhat.FOR_USER)
|
|
||||||
# return "You are quited!"
|
|
||||||
|
|
||||||
@test_router.registrar.with_decorator(
|
@test_router.registrar.with_decorator(
|
||||||
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
||||||
@ -51,7 +29,6 @@ async def main_part_handle(event: BotEvent):
|
|||||||
state_idx = int(payload["test"])
|
state_idx = int(payload["test"])
|
||||||
logging.debug(f"State index: {state_idx}")
|
logging.debug(f"State index: {state_idx}")
|
||||||
|
|
||||||
|
|
||||||
q_res = payload['q'] if 'q' in payload else event.object.object.message.text
|
q_res = payload['q'] if 'q' in payload else event.object.object.message.text
|
||||||
logging.debug(f"Qres: {q_res}")
|
logging.debug(f"Qres: {q_res}")
|
||||||
|
|
||||||
@ -73,7 +50,7 @@ async def main_part_handle(event: BotEvent):
|
|||||||
return await botevent.answer(
|
return await botevent.answer(
|
||||||
message=locales.questions[state_idx + 1][0],
|
message=locales.questions[state_idx + 1][0],
|
||||||
payload=json.dumps({"test": state_idx + 1}),
|
payload=json.dumps({"test": state_idx + 1}),
|
||||||
|
keyboard=EMPTY_KB, # try to remove keyboard
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# todo add task to send user an image here
|
# todo add task to send user an image here
|
||||||
@ -92,21 +69,3 @@ async def main_part_handle(event: BotEvent):
|
|||||||
message=locales.LAST_MESSAGE,
|
message=locales.LAST_MESSAGE,
|
||||||
keyboard=locales.LAST_MESSAGE_KB.get_keyboard(),
|
keyboard=locales.LAST_MESSAGE_KB.get_keyboard(),
|
||||||
)
|
)
|
||||||
|
|
||||||
# @test_router.registrar.with_decorator(
|
|
||||||
# StateFilter(fsm=fsm, state=MyState.age, for_what=ForWhat.FOR_USER),
|
|
||||||
# )
|
|
||||||
# async def simple_handler(event: BotEvent):
|
|
||||||
# if not event.object.object.message.text.isdigit():
|
|
||||||
# return f"Please, send only positive numbers!"
|
|
||||||
# await fsm.add_data(
|
|
||||||
# event=event,
|
|
||||||
# for_what=ForWhat.FOR_USER,
|
|
||||||
# state_data={"age": event.object.object.message.text},
|
|
||||||
# )
|
|
||||||
# user_data = await fsm.get_data(event=event, for_what=ForWhat.FOR_USER)
|
|
||||||
#
|
|
||||||
# # finish poll and delete the user
|
|
||||||
# # `fsm.finish` will do it
|
|
||||||
# await fsm.finish(event=event, for_what=ForWhat.FOR_USER)
|
|
||||||
# return f"Your data - {user_data}"
|
|
||||||
|
BIN
img.jpg
BIN
img.jpg
Binary file not shown.
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 131 B |
39
locales.py
39
locales.py
@ -1,21 +1,20 @@
|
|||||||
from vkwave.bots import Keyboard, ButtonColor
|
from vkwave.bots import Keyboard, ButtonColor
|
||||||
|
|
||||||
# menu
|
# menu
|
||||||
MENU = """Здравствуйте, дорогие друзья Инженерной школы НГУ!
|
MENU = """С помощью бота вы можете:
|
||||||
Мы создали этого бота, чтобы помочь вам ориентироваться в информации про ИШ. Вы можете:
|
|
||||||
⚙ пройти тест и получить индивидуальный NFT-талисман, сгенерированный специально для вас нейросетью;
|
⚙ пройти тест и получить индивидуальный NFT-талисман, сгенерированный специально для вас нейросетью;
|
||||||
⚙ вступить в чат абитуриентов, студентов и преподавателей;
|
⚙ вступить в чат абитуриентов, студентов и преподавателей;
|
||||||
⚙ пообщаться со студентом (можно выбрать, с кем);
|
⚙ пообщаться со студентом (можно выбрать с кем);
|
||||||
⚙ пообщаться с руководителем ИШ или преподавателем (можно выбрать, с кем);
|
⚙ пообщаться с руководителем ИШ или преподавателем (можно выбрать с кем)."""
|
||||||
Добро пожаловать!"""
|
|
||||||
MENU_KB = Keyboard()
|
MENU_KB = Keyboard()
|
||||||
MENU_KB.add_text_button(text="Пройти тест", payload={"test": "-1"}, color=ButtonColor.POSITIVE)
|
MENU_KB.add_text_button(text="Пройти тест", payload={"test": "-1"}, color=ButtonColor.POSITIVE)
|
||||||
MENU_KB.add_link_button(text="Чат абитуриентов", link="https://vk.me/join/AJQ1dw97/SBEQYIyQdZfG69y")
|
MENU_KB.add_link_button(text="Чат абитуриентов", link="https://vk.me/join/AJQ1dw97/SBEQYIyQdZfG69y")
|
||||||
MENU_KB.add_row()
|
MENU_KB.add_row()
|
||||||
MENU_KB.add_text_button(text="Пообщаться со студентом", payload={"student": "1"}, color=ButtonColor.PRIMARY)
|
MENU_KB.add_text_button(text="Пообщаться со студентом", payload={"student": "1"}, color=ButtonColor.PRIMARY)
|
||||||
MENU_KB.add_row()
|
MENU_KB.add_row()
|
||||||
MENU_KB.add_text_button(text="Задать вопрос преподавателю", payload={"teacher": "1"}, color=ButtonColor.PRIMARY)
|
MENU_KB.add_text_button(text="Пообщаться с преподавателем", payload={"teacher": "1"}, color=ButtonColor.PRIMARY)
|
||||||
|
# MENU_KB.add_row()
|
||||||
|
# MENU_KB.add_text_button(text="АЧе делать?", payload={"man": "1"}, color=ButtonColor.PRIMARY)
|
||||||
|
|
||||||
# Student menu
|
# Student menu
|
||||||
ST_MENU = """Если вы ходите узнать про жизнь студента Инженерной школы, то можете написать этим ребятам:
|
ST_MENU = """Если вы ходите узнать про жизнь студента Инженерной школы, то можете написать этим ребятам:
|
||||||
@ -58,6 +57,16 @@ TC_KB.add_link_button(text="Юрий Даниилович", link="https://vk.com
|
|||||||
TC_KB.add_row()
|
TC_KB.add_row()
|
||||||
TC_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.NEGATIVE)
|
TC_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.NEGATIVE)
|
||||||
|
|
||||||
|
# Manual
|
||||||
|
MAN = """Если вы хотите пройти тест - нажми на соответствующую кнопку.
|
||||||
|
Если вы абитуриент, и хотите узнать больше про инженерную школу, то вы можете пообщаться со студентами или преподавателями!
|
||||||
|
Для этого нажмите на кнопку “Диалог со студентом” или “Диалог с преподавателем”.
|
||||||
|
Также вы можете узнать про нас из соцсетей - для этого нажмите на кнопку “Таплинк”.
|
||||||
|
Если вы хотите пообщаться с другими абитуриентами - нажми на кнопку “Неформальный чат”.
|
||||||
|
Приятного пользования!"""
|
||||||
|
|
||||||
|
MAN_KB = Keyboard()
|
||||||
|
MAN_KB.add_text_button(text="ХОЧУ ДОМОЙ!!!!!!!!!!!!!!!", payload={}, color=ButtonColor.NEGATIVE)
|
||||||
|
|
||||||
# TEST Questions
|
# TEST Questions
|
||||||
INPUT_NAME_TEXT = "Пожалуйста, введите имя:"
|
INPUT_NAME_TEXT = "Пожалуйста, введите имя:"
|
||||||
@ -67,9 +76,10 @@ WHAT_ENGINEER_ARE_YOU = "Кто ты из инженеров?"
|
|||||||
WHAT_ENGINEER_ARE_YOU_KB = Keyboard()
|
WHAT_ENGINEER_ARE_YOU_KB = Keyboard()
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Илон Маск", payload={"q": "Илон Маск"}, color=ButtonColor.PRIMARY)
|
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Илон Маск", payload={"q": "Илон Маск"}, color=ButtonColor.PRIMARY)
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Дмитрий Рогозин", payload={"q": "Дмитрий Рогозин"}, color=ButtonColor.PRIMARY)
|
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Дмитрий Рогозин", payload={"q": "Дмитрий Рогозин"}, color=ButtonColor.PRIMARY)
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Никола Тесла", payload={"q": "Никола Тесла"}, color=ButtonColor.PRIMARY)
|
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_row()
|
WHAT_ENGINEER_ARE_YOU_KB.add_row()
|
||||||
|
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Никола Тесла", payload={"q": "Никола Тесла"}, color=ButtonColor.PRIMARY)
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Иван Кулибин", payload={"q": "Иван Кулибин"}, color=ButtonColor.PRIMARY)
|
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Иван Кулибин", payload={"q": "Иван Кулибин"}, color=ButtonColor.PRIMARY)
|
||||||
|
WHAT_ENGINEER_ARE_YOU_KB.add_row()
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Михаил Калашников", payload={"q": "Михаил Калашников"}, color=ButtonColor.PRIMARY)
|
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Михаил Калашников", payload={"q": "Михаил Калашников"}, color=ButtonColor.PRIMARY)
|
||||||
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Юрий Кондратюк", payload={"q": "Юрий Кондратюк"}, color=ButtonColor.PRIMARY)
|
WHAT_ENGINEER_ARE_YOU_KB.add_text_button(text="Юрий Кондратюк", payload={"q": "Юрий Кондратюк"}, color=ButtonColor.PRIMARY)
|
||||||
|
|
||||||
@ -92,9 +102,11 @@ FAV_THEME = "Какая школьная дисциплина нравится
|
|||||||
FAV_THEME_KB = Keyboard()
|
FAV_THEME_KB = Keyboard()
|
||||||
FAV_THEME_KB.add_text_button(text="Математика", payload={"q": "Математика"}, color=ButtonColor.PRIMARY)
|
FAV_THEME_KB.add_text_button(text="Математика", payload={"q": "Математика"}, color=ButtonColor.PRIMARY)
|
||||||
FAV_THEME_KB.add_text_button(text="Русский/Литература", payload={"q": "русскийлитра"}, color=ButtonColor.PRIMARY)
|
FAV_THEME_KB.add_text_button(text="Русский/Литература", payload={"q": "русскийлитра"}, color=ButtonColor.PRIMARY)
|
||||||
FAV_THEME_KB.add_text_button(text="Информатика/программирование", payload={"q": "Инфа"}, color=ButtonColor.PRIMARY)
|
|
||||||
FAV_THEME_KB.add_row()
|
FAV_THEME_KB.add_row()
|
||||||
|
FAV_THEME_KB.add_text_button(text="Информатика/программирование", payload={"q": "Инфа"}, color=ButtonColor.PRIMARY)
|
||||||
FAV_THEME_KB.add_text_button(text="Физика", payload={"q": "Физика"}, color=ButtonColor.PRIMARY)
|
FAV_THEME_KB.add_text_button(text="Физика", payload={"q": "Физика"}, color=ButtonColor.PRIMARY)
|
||||||
|
FAV_THEME_KB.add_row()
|
||||||
|
FAV_THEME_KB.add_text_button(text="История/обществознание", payload={"q": "Инфа"}, color=ButtonColor.PRIMARY)
|
||||||
FAV_THEME_KB.add_text_button(text="Другой", payload={"q": "other"}, color=ButtonColor.PRIMARY)
|
FAV_THEME_KB.add_text_button(text="Другой", payload={"q": "other"}, color=ButtonColor.PRIMARY)
|
||||||
|
|
||||||
# 4
|
# 4
|
||||||
@ -117,15 +129,14 @@ TRANS_ENGINEER_COUNT_KB.add_text_button(text="5", payload={"q": "5"}, color=Butt
|
|||||||
# 6
|
# 6
|
||||||
ZODIAC = "Кто вы по знаку зодиака?"
|
ZODIAC = "Кто вы по знаку зодиака?"
|
||||||
# ZODIAC_KB = Keyboard()
|
# ZODIAC_KB = Keyboard()
|
||||||
# 7
|
# # 7
|
||||||
CONTACT = "Введите почту или ник в телеграмме, по которому мы сможем прислать вам результаты"
|
# CONTACT = "Введите почту или ник в телеграмме, по которому мы сможем прислать вам результаты"
|
||||||
|
|
||||||
# last
|
# last
|
||||||
LAST_MESSAGE = "Спасибо, что прошли тест!"
|
LAST_MESSAGE = "Теперь у вас есть ваш персональный NFT-талисман! Он поможет вам при сдаче экзаменов и поступлении в желаемый университет 🌟"
|
||||||
LAST_MESSAGE_KB = Keyboard()
|
LAST_MESSAGE_KB = Keyboard()
|
||||||
LAST_MESSAGE_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.POSITIVE)
|
LAST_MESSAGE_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.POSITIVE)
|
||||||
|
|
||||||
|
|
||||||
questions = [
|
questions = [
|
||||||
(WHAT_ENGINEER_ARE_YOU, WHAT_ENGINEER_ARE_YOU_KB),
|
(WHAT_ENGINEER_ARE_YOU, WHAT_ENGINEER_ARE_YOU_KB),
|
||||||
(PROG_LANG, PROG_LANG_KB),
|
(PROG_LANG, PROG_LANG_KB),
|
||||||
@ -133,5 +144,5 @@ questions = [
|
|||||||
(EGE, EGE_KB),
|
(EGE, EGE_KB),
|
||||||
(TRANS_ENGINEER_COUNT, TRANS_ENGINEER_COUNT_KB),
|
(TRANS_ENGINEER_COUNT, TRANS_ENGINEER_COUNT_KB),
|
||||||
(ZODIAC, None),
|
(ZODIAC, None),
|
||||||
(CONTACT, None),
|
# (CONTACT, None),
|
||||||
]
|
]
|
||||||
|
4
main.py
4
main.py
@ -3,7 +3,7 @@ import logging
|
|||||||
from vkwave.bots import SimpleLongPollBot, PhotoUploader
|
from vkwave.bots import SimpleLongPollBot, PhotoUploader
|
||||||
|
|
||||||
from blueprints import (
|
from blueprints import (
|
||||||
menu_router, test_router, student_router, teacher_router,
|
menu_router, test_router, student_router, teacher_router, man_router,
|
||||||
)
|
)
|
||||||
from config import Config
|
from config import Config
|
||||||
from middlewares import UserMiddleware
|
from middlewares import UserMiddleware
|
||||||
@ -21,10 +21,10 @@ Config().uploader = uploader
|
|||||||
bot.middleware_manager.add_middleware(UserMiddleware())
|
bot.middleware_manager.add_middleware(UserMiddleware())
|
||||||
bot.middleware_manager.add_middleware(TestStateMiddleware())
|
bot.middleware_manager.add_middleware(TestStateMiddleware())
|
||||||
|
|
||||||
|
|
||||||
bot.dispatcher.add_router(test_router)
|
bot.dispatcher.add_router(test_router)
|
||||||
bot.dispatcher.add_router(student_router)
|
bot.dispatcher.add_router(student_router)
|
||||||
bot.dispatcher.add_router(teacher_router)
|
bot.dispatcher.add_router(teacher_router)
|
||||||
|
bot.dispatcher.add_router(man_router)
|
||||||
|
|
||||||
# регаем последним чтобы сначала проверялись все остальные команды
|
# регаем последним чтобы сначала проверялись все остальные команды
|
||||||
bot.dispatcher.add_router(menu_router)
|
bot.dispatcher.add_router(menu_router)
|
||||||
|
@ -1,32 +1,14 @@
|
|||||||
import base64
|
|
||||||
import io
|
import io
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
import matplotlib.image as mpimg
|
import matplotlib.image as mpimg
|
||||||
import numpy as np
|
import base64
|
||||||
import numba
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
IMAGE_PATH = 'pics'
|
||||||
|
|
||||||
@numba.njit
|
|
||||||
def optimized_mandelbrot(n_rows, n_columns, iterations, cx, cy):
|
|
||||||
x_cor = np.linspace(-2, 2, n_rows)
|
|
||||||
y_cor = np.linspace(-2, 2, n_columns)
|
|
||||||
output = np.zeros((n_rows,n_columns))
|
|
||||||
c = cx + 1j * cy
|
|
||||||
for i in range(n_rows):
|
|
||||||
for j in range(n_columns):
|
|
||||||
z = x_cor[i] + y_cor[j] * 1j
|
|
||||||
count = 0
|
|
||||||
for k in range(iterations):
|
|
||||||
z = (z*z) + c
|
|
||||||
count += 1
|
|
||||||
if np.abs(z) > 4:
|
|
||||||
break
|
|
||||||
output[i, j] = count
|
|
||||||
return output.T
|
|
||||||
|
|
||||||
|
|
||||||
def open_image_as_array(path):
|
def open_image_as_array(path):
|
||||||
@ -34,21 +16,24 @@ def open_image_as_array(path):
|
|||||||
|
|
||||||
|
|
||||||
def get_encoded_img(arr):
|
def get_encoded_img(arr):
|
||||||
img = Image.fromarray(arr).convert("L")
|
img = Image.fromarray(arr)
|
||||||
img_byte_arr = io.BytesIO()
|
img_byte_arr = io.BytesIO()
|
||||||
img.save(img_byte_arr, format='PNG')
|
img.save(img_byte_arr, format='PNG')
|
||||||
encoded_img = base64.encodebytes(img_byte_arr.getvalue()).decode('ascii')
|
encoded_img = base64.encodebytes(img_byte_arr.getvalue()).decode('ascii')
|
||||||
return encoded_img
|
return str(encoded_img)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/getImage', methods=['GET'])
|
@app.route('/getImage', methods=['GET'])
|
||||||
def get_image():
|
def get_image():
|
||||||
name = request.args.get('name')
|
# print(random.choice(os.listdir(IMAGE_PATH)))
|
||||||
fractal = optimized_mandelbrot(1000, 1000, np.random.randint(2, 251), np.random.uniform(-1, 1), np.random.uniform(-1, 1))
|
file = os.path.join(IMAGE_PATH, random.choice(os.listdir(IMAGE_PATH)))
|
||||||
img = get_encoded_img(fractal)
|
# buffered = io.BytesIO()
|
||||||
|
# image.save(buffered, format="JPEG")
|
||||||
|
# img_str = base64.b64encode(buffered.getvalue())
|
||||||
|
image = base64.encodebytes(open(file, 'rb').read()).decode('ascii')
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"code": 0,
|
"code": 0,
|
||||||
"image": img,
|
"image": image,
|
||||||
"first_time": 1
|
"first_time": 1
|
||||||
})
|
})
|
||||||
|
|
||||||
|
BIN
nft_svc/pics/CVT_Qma1K5CgzcthqmeKj6SrYUwKd9Tho2dRimE3tKKDtJ5Jg1.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma1K5CgzcthqmeKj6SrYUwKd9Tho2dRimE3tKKDtJ5Jg1.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma2BZS2XDo9qMLfNQJ5c5wA7nAhKBXF87ewi3BJB6KG6z.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma2BZS2XDo9qMLfNQJ5c5wA7nAhKBXF87ewi3BJB6KG6z.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma34ddY5rpprLa18iiCbNMpXSm75za6ASXebXjmFuxJda.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma34ddY5rpprLa18iiCbNMpXSm75za6ASXebXjmFuxJda.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma3NdGrDkHtk18UYrH397ucQEHcoDtKkzzHDbEobts9Ye.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma3NdGrDkHtk18UYrH397ucQEHcoDtKkzzHDbEobts9Ye.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma4aVQkgWrN9mJ15u9ERXfP7Tgw6KS3VuAAFkB7bT7ofc.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma4aVQkgWrN9mJ15u9ERXfP7Tgw6KS3VuAAFkB7bT7ofc.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma6Gmadq87bN871FwVZFakEj27m6NHvWdQCJ8nqsfHN6y.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma6Gmadq87bN871FwVZFakEj27m6NHvWdQCJ8nqsfHN6y.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma9B6buzf1bpbVehmPaRYhs9JnpEtqH3x1c1ChGpD4oSF.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma9B6buzf1bpbVehmPaRYhs9JnpEtqH3x1c1ChGpD4oSF.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qma9LH68TqyVLkSc3ML48m2Do2McTNbLdzCbDMcxtxTZYi.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qma9LH68TqyVLkSc3ML48m2Do2McTNbLdzCbDMcxtxTZYi.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaDRbLMfvknqBFBPfMV4T2L1nHvazcvyMeNrzHTmkBh2Q.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaDRbLMfvknqBFBPfMV4T2L1nHvazcvyMeNrzHTmkBh2Q.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaDxVYiftgzFpdPyvwPSmpmCaJQY6heXvhcqkd6A9c2Th.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaDxVYiftgzFpdPyvwPSmpmCaJQY6heXvhcqkd6A9c2Th.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaEi29fEJ6oCsmzVkzvbgkHaUgBLGbejz3wfPwn2gAKGB.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaEi29fEJ6oCsmzVkzvbgkHaUgBLGbejz3wfPwn2gAKGB.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaEmyNJkaGwPzt81Ckh6gfCjWkS8SU6rcGinitrgwoTC1.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaEmyNJkaGwPzt81Ckh6gfCjWkS8SU6rcGinitrgwoTC1.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaGZ5ZLWpcBDfVc1nk1Z9NKhRbosdpmRf5ou6LomjFyFt.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaGZ5ZLWpcBDfVc1nk1Z9NKhRbosdpmRf5ou6LomjFyFt.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaGbUgTouqsEms6YV549GTEgnGDU9tcKd7phjxdop9miq.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaGbUgTouqsEms6YV549GTEgnGDU9tcKd7phjxdop9miq.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaJCu36QXpZU8Yxb9ed4FaF1zdCH5jpyUVataa42N8ymE.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaJCu36QXpZU8Yxb9ed4FaF1zdCH5jpyUVataa42N8ymE.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaKgSXg6CuLcgTTEYmzi3Wf39iJCRvC8L7qzCFyurKjca.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaKgSXg6CuLcgTTEYmzi3Wf39iJCRvC8L7qzCFyurKjca.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaKrSzBM6Z2gDZoj3LzVYteeJTEH5nKuf1xH477P3pWZD.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaKrSzBM6Z2gDZoj3LzVYteeJTEH5nKuf1xH477P3pWZD.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaL58fifkbmp5ua5UdqHoDSFUXCbAZtdhYNDbEXepBbyY.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaL58fifkbmp5ua5UdqHoDSFUXCbAZtdhYNDbEXepBbyY.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaMAijN3sidd278axRth5VSM7QtYGmXmG5HToGRohzX3o.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaMAijN3sidd278axRth5VSM7QtYGmXmG5HToGRohzX3o.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaMEgoT2JUp4TbhrZyWN6AyEFpaVTPnZzUXxjBUGgKhqz.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaMEgoT2JUp4TbhrZyWN6AyEFpaVTPnZzUXxjBUGgKhqz.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaSyaW1BAjCiJ8yY73PN4FPm4xP93gjdZFGqdPu86ZSwH.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaSyaW1BAjCiJ8yY73PN4FPm4xP93gjdZFGqdPu86ZSwH.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaVotBMs8gz3SwSadgx9kyWXNmiCHWecEYEjui4AjiHYN.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaVotBMs8gz3SwSadgx9kyWXNmiCHWecEYEjui4AjiHYN.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaWvdqVZQeQXqSfR1HwPgWUUp1rfvDCQKvcc3gouhfbRm.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaWvdqVZQeQXqSfR1HwPgWUUp1rfvDCQKvcc3gouhfbRm.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmaZUBZqVyogW15Bs9dLepFDZAcCCAfXcGrpR91B9jTNRs.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmaZUBZqVyogW15Bs9dLepFDZAcCCAfXcGrpR91B9jTNRs.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmabbuMzAAmC6FoCB5CirX7wLqzRMaSGzNXo4ZydP4qQXS.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmabbuMzAAmC6FoCB5CirX7wLqzRMaSGzNXo4ZydP4qQXS.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmabmeKDLNuP3U1APbqTZBVteRcGtyz7HMhzWgdYRCZJrM.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmabmeKDLNuP3U1APbqTZBVteRcGtyz7HMhzWgdYRCZJrM.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmadeX35BEv7BSPD4iwZFVv75Bjko9zwUM4EScNyF2odwE.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmadeX35BEv7BSPD4iwZFVv75Bjko9zwUM4EScNyF2odwE.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmafTeagXdPKnAS8idcBCopmHXQYfqXgHxYbbbpnQ4NL6p.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmafTeagXdPKnAS8idcBCopmHXQYfqXgHxYbbbpnQ4NL6p.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmafjR3GJ9HDGxbgr5rnUHcYTo63aV4wKu1Fy88orezvRr.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmafjR3GJ9HDGxbgr5rnUHcYTo63aV4wKu1Fy88orezvRr.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmag6ZLzmBS8Yq5a7zTYEz29guMnVahzgC1ubNdTTp9Dwt.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmag6ZLzmBS8Yq5a7zTYEz29guMnVahzgC1ubNdTTp9Dwt.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmaj61UgqQ1GKaYKYXQa1kztVSRKojEF8CEyyudKbpWqJE.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmaj61UgqQ1GKaYKYXQa1kztVSRKojEF8CEyyudKbpWqJE.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmajN2HLraSryKk85yL8ziJkgfW8fdrLBTgbDHnuzSkeLD.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmajN2HLraSryKk85yL8ziJkgfW8fdrLBTgbDHnuzSkeLD.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmajjKGWrDdqsVwfFWvtEALX5zeg1Ju8B8CJ7xAEsx6aKy.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmajjKGWrDdqsVwfFWvtEALX5zeg1Ju8B8CJ7xAEsx6aKy.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmam7Fv62fax4JCzcWzpGwcfVD79CvVfEnvfx1fF4wHSgv.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmam7Fv62fax4JCzcWzpGwcfVD79CvVfEnvfx1fF4wHSgv.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmanJPfagsPv5rop4wFqXwCXYm2c4EwzCVozspz6FSPUAA.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmanJPfagsPv5rop4wFqXwCXYm2c4EwzCVozspz6FSPUAA.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmapDRkc9ftLKvfBEFutDq2r39ATczU7GMStMXmXfz6p4t.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmapDRkc9ftLKvfBEFutDq2r39ATczU7GMStMXmXfz6p4t.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmatP5oEnCHCdcH9ZvKnutVNDJdf9nj2ih3Empvnxuy4J2.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmatP5oEnCHCdcH9ZvKnutVNDJdf9nj2ih3Empvnxuy4J2.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmattVVN45mTHCvCmMNxi6GiZZHedP3ew3ENZbpCpHFC5f.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmattVVN45mTHCvCmMNxi6GiZZHedP3ew3ENZbpCpHFC5f.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmaw8pNjYTY1TsHiBmVQ9QdfMnt7xFphWzPY5iggXCwnrP.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmaw8pNjYTY1TsHiBmVQ9QdfMnt7xFphWzPY5iggXCwnrP.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmawx1RjED8arBaFoG8vWc9YDBPiQY4QVgCSAUqHrnWTzP.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmawx1RjED8arBaFoG8vWc9YDBPiQY4QVgCSAUqHrnWTzP.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmayRDxaK7xWnSE8oRJEAL3xsCNT6tQNNaWk1FhCCKLHHf.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmayRDxaK7xWnSE8oRJEAL3xsCNT6tQNNaWk1FhCCKLHHf.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmazun61wXRfPjHDwwE7pDtRSuekeHjHeu1LcvowW9VjJK.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmazun61wXRfPjHDwwE7pDtRSuekeHjHeu1LcvowW9VjJK.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmb1k7w7Cef71qoz7nf2wVBQjNgfDSzoCvqQyNuZHA48xd.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmb1k7w7Cef71qoz7nf2wVBQjNgfDSzoCvqQyNuZHA48xd.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmb3b4TE8E6KozFw8PQdM4Z6V92coFQ8EA6CoWnVf2wJPA.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmb3b4TE8E6KozFw8PQdM4Z6V92coFQ8EA6CoWnVf2wJPA.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmb3hii9pPbiJmkrhRWJu2ehuf5WPhcvteubxYxMDJGBx1.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmb3hii9pPbiJmkrhRWJu2ehuf5WPhcvteubxYxMDJGBx1.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmb4w4VqJWkWVGveh49cPixAfXNEASYTswVjso2HB7v4eU.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmb4w4VqJWkWVGveh49cPixAfXNEASYTswVjso2HB7v4eU.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmb6aDehMdQvLQ8mz8kQyKBb7JyMCXh2sHyfvjPdNaNeTN.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmb6aDehMdQvLQ8mz8kQyKBb7JyMCXh2sHyfvjPdNaNeTN.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmb8z12AJm8kXDp6yc6qATgLpBT3tqqavoWmrRTVRAqAuW.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmb8z12AJm8kXDp6yc6qATgLpBT3tqqavoWmrRTVRAqAuW.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbD3xEVxvSkWXjj3c1xEGUwKuEuVau3mwGL4ghVorJbGX.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbD3xEVxvSkWXjj3c1xEGUwKuEuVau3mwGL4ghVorJbGX.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbNh3L2XUMnh3xMirGKQeLBfmwEvVkNEYVkqMVoPFqkJd.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbNh3L2XUMnh3xMirGKQeLBfmwEvVkNEYVkqMVoPFqkJd.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbT3GLeJrdyqfHYjsPpRfBTgNdqyEi3JnnCMkHktD3ush.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbT3GLeJrdyqfHYjsPpRfBTgNdqyEi3JnnCMkHktD3ush.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbTadqUAqYaUKCDEiXkRxAExZ4u4wF61BKzqDbKyeo79B.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbTadqUAqYaUKCDEiXkRxAExZ4u4wF61BKzqDbKyeo79B.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbUykVTfuyDjPKMB9ec58ZeCzobgk1Wj2j1YahLpdUNtq.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbUykVTfuyDjPKMB9ec58ZeCzobgk1Wj2j1YahLpdUNtq.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbYdArMsaDTkCykbrmmy2ZMu6cib4Xi8fxZUWmLEC5EKe.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbYdArMsaDTkCykbrmmy2ZMu6cib4Xi8fxZUWmLEC5EKe.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbfY4coP6E8WuZBAQTksBaED2CG8Er1CBgiPwg22kgftC.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbfY4coP6E8WuZBAQTksBaED2CG8Er1CBgiPwg22kgftC.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmbfk9P6YmqVdZjnLSWJKpH35TY2v7FACwSf7NBmiiNxaU.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmbfk9P6YmqVdZjnLSWJKpH35TY2v7FACwSf7NBmiiNxaU.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmbh85akVePYM5HpoDsXXnFAZArYfiUbj2oiL5XC7KNV6R.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmbh85akVePYM5HpoDsXXnFAZArYfiUbj2oiL5XC7KNV6R.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbhficXqS3857gzmLEqozznAcSsN3UBc4asmsDpsUMDac.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbhficXqS3857gzmLEqozznAcSsN3UBc4asmsDpsUMDac.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbpiEk2vGRhPUXeCcuHkchj7VKYcAk3FcsP84GC34psep.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbpiEk2vGRhPUXeCcuHkchj7VKYcAk3FcsP84GC34psep.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbqCf38McontHnRg4sA345N2P8njmt4uNsRhZW15fmBc1.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbqCf38McontHnRg4sA345N2P8njmt4uNsRhZW15fmBc1.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbsBtJPp94znjxs2NGtYa5D32Rhx6k2w9vNhGeh44ps9v.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbsBtJPp94znjxs2NGtYa5D32Rhx6k2w9vNhGeh44ps9v.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbtEg8b7yHNnZjzs5jjCvBVFG3Nad3R6z7TYqbw2rWEaA.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbtEg8b7yHNnZjzs5jjCvBVFG3Nad3R6z7TYqbw2rWEaA.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbuGEbHofRxXipQRKNQbLCDr6h4z2orZLx9zwBB1i5kAv.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbuGEbHofRxXipQRKNQbLCDr6h4z2orZLx9zwBB1i5kAv.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbvYXRjmdxA64MtX9GBJZbJKuhK27rpTavasxqa28ZCCx.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbvYXRjmdxA64MtX9GBJZbJKuhK27rpTavasxqa28ZCCx.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmbxxsHUGX9w3JFrvsnDFbQLCSre1mTjgfy9hUjBYstzm6.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmbxxsHUGX9w3JFrvsnDFbQLCSre1mTjgfy9hUjBYstzm6.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmc2tNpvg9evTm3EYN6qeYCwTgvx38AWNsCwRmbByc27HU.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmc2tNpvg9evTm3EYN6qeYCwTgvx38AWNsCwRmbByc27HU.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmc2vAko2xbADEPNBri4tCLBiyQukViXPEQQ9FrSVmcGLp.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmc2vAko2xbADEPNBri4tCLBiyQukViXPEQQ9FrSVmcGLp.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmc4B7rijMBru7g88XntiiendhUwBAy7ASEXct2d1ExZxS.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmc4B7rijMBru7g88XntiiendhUwBAy7ASEXct2d1ExZxS.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmc4sVnPar1Ew2Q54YPLxy7Yj6m7yJGo6ptzp6PUXmEMoN.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmc4sVnPar1Ew2Q54YPLxy7Yj6m7yJGo6ptzp6PUXmEMoN.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcALPkMEZPunyk57CSBQWKArvx1K5SECNAGrPhnELo4xh.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcALPkMEZPunyk57CSBQWKArvx1K5SECNAGrPhnELo4xh.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcBPQg4L8rgzuPEnPiVWXES2Zu21zqLcFMxzm6Bo2AEBK.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcBPQg4L8rgzuPEnPiVWXES2Zu21zqLcFMxzm6Bo2AEBK.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcBpKKFCx8Vq9sjiEtR3opUfdXZqbMHyFwXuQqkrgHnW9.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcBpKKFCx8Vq9sjiEtR3opUfdXZqbMHyFwXuQqkrgHnW9.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcCApW7BTAtDrhJXRz58ZneBWLHueqPyWCKAfRE84F1Ng.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcCApW7BTAtDrhJXRz58ZneBWLHueqPyWCKAfRE84F1Ng.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcCyoX3fX7HSACrh89z1FHKCCfypxxSCrfBxkMUWXXwW7.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcCyoX3fX7HSACrh89z1FHKCCfypxxSCrfBxkMUWXXwW7.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcDtbawGDgCLBs8fBahVwTiuqLDc4uJqyZkL7P6J2s3gF.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcDtbawGDgCLBs8fBahVwTiuqLDc4uJqyZkL7P6J2s3gF.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcFardKJdWsTZ8DVv2Nj16MHFzgnZmdcsWtbwuhCyLJ6P.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcFardKJdWsTZ8DVv2Nj16MHFzgnZmdcsWtbwuhCyLJ6P.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcJcWmfMrZip1Bg4HrVxZedu2NG3ugUYcGrjYqyftDbSs.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcJcWmfMrZip1Bg4HrVxZedu2NG3ugUYcGrjYqyftDbSs.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcKNcRN1V7vMGXBHSojpdPbi3Va4vhdzmZxyEt8eCMvYB.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcKNcRN1V7vMGXBHSojpdPbi3Va4vhdzmZxyEt8eCMvYB.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcKZjmpahpR9pa8YPynbumNnGU3km3mbcTfH4fJY2DvmC.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcKZjmpahpR9pa8YPynbumNnGU3km3mbcTfH4fJY2DvmC.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcNgQUfUsWTFQ22omQdwGyDc5cT4qrVfNsAjh1xxPEAnm.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcNgQUfUsWTFQ22omQdwGyDc5cT4qrVfNsAjh1xxPEAnm.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcbBJ3nC9GLYqB69uHuRewBv3e7NZvvcMGTKUH8Ex9rHr.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcbBJ3nC9GLYqB69uHuRewBv3e7NZvvcMGTKUH8Ex9rHr.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmccYKbGXdbNw54A4NSv159J6K9iW1bMXwaWbVAW1KpHrG.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmccYKbGXdbNw54A4NSv159J6K9iW1bMXwaWbVAW1KpHrG.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmcd6eFwYfWoUwVABsDE8HLVdpNt48adM5JRRXGjNdm6sf.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmcd6eFwYfWoUwVABsDE8HLVdpNt48adM5JRRXGjNdm6sf.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcdSVxGRY79XtbB1ds7HpVme3aACC2f9MzUwxCWsvD7d1.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcdSVxGRY79XtbB1ds7HpVme3aACC2f9MzUwxCWsvD7d1.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmcdq8ZQXZq2SpjtFnBBoDDfMqp2akbvpZ7SzSaFnDASRj.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmcdq8ZQXZq2SpjtFnBBoDDfMqp2akbvpZ7SzSaFnDASRj.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmciT5m4AqLNM8kTnv9bQxqiPFR43Wom3qcneq5qSmRyUq.jpg.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmciT5m4AqLNM8kTnv9bQxqiPFR43Wom3qcneq5qSmRyUq.jpg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmcjy28M1xbHf9ffbwaDdN2fM2cSqq8gwyn2BNXRnchYKd.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmcjy28M1xbHf9ffbwaDdN2fM2cSqq8gwyn2BNXRnchYKd.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_Qmco63HDEh8eLkza9DyyFynAPbZeprGDjVWvWXoFWTdcGF.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_Qmco63HDEh8eLkza9DyyFynAPbZeprGDjVWvWXoFWTdcGF.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
nft_svc/pics/CVT_QmcpXVDSVvFjckYS6CyP4roovfEE7CAbJYG5X4XiZ3KKXv.png
(Stored with Git LFS)
Normal file
BIN
nft_svc/pics/CVT_QmcpXVDSVvFjckYS6CyP4roovfEE7CAbJYG5X4XiZ3KKXv.png
(Stored with Git LFS)
Normal file
Binary file not shown.
Reference in New Issue
Block a user