Skip to content

Commit

Permalink
added game publish for forum
Browse files Browse the repository at this point in the history
  • Loading branch information
bomzheg committed May 14, 2023
1 parent b54b17a commit e171135
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 5 deletions.
9 changes: 6 additions & 3 deletions shvatka/infrastructure/crawler/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
from shvatka.infrastructure.crawler.constants import COOKIE_NAME, BASE_URL
from shvatka.infrastructure.crawler.models import Credentials

ENV_USERNAME = os.getenv("SH_USERNAME")
ENV_PASSWORD = os.getenv("SH_PASSWORD")


async def auth(session: ClientSession, creds: Credentials):
php_session = await get_login_page(session)
Expand Down Expand Up @@ -44,11 +47,11 @@ async def authorize(session: ClientSession, php_session: str, creds: Credentials
}


async def get_auth_cookie():
async def get_auth_cookie(username: str = ENV_USERNAME, password: str = ENV_PASSWORD):
async with ClientSession() as session:
creds = Credentials(
username=os.getenv("SH_USERNAME"),
password=os.getenv("SH_PASSWORD"),
username=username,
password=password,
)
if not creds.username or not creds.password:
raise EnvironmentError(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
)


async def upload(game: GameForUpload):
async with ClientSession(cookies=await get_auth_cookie()) as session:
async def upload(game: GameForUpload, username: str, password: str):
async with ClientSession(cookies=await get_auth_cookie(username, password)) as session:
await remove_all_scn(session)
for level in game:
await asyncio.sleep(1)
Expand Down
7 changes: 7 additions & 0 deletions shvatka/tgbot/dialogs/game_manage/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
show_my_game_orgs,
show_my_zip_scn,
get_excel_results_handler,
to_publish_game_forum,
)
from ..preview_data import PREVIEW_GAME

Expand Down Expand Up @@ -260,6 +261,12 @@
on_click=publish_game,
when=F["game"].can_be_publish,
),
Button(
Const("📨Опубликовать на форуме"),
id="game_forum_publish",
on_click=to_publish_game_forum,
when=F["game"].can_be_publish,
),
Button(
Const("📆Запланировать игру"),
id="start_schedule_game",
Expand Down
23 changes: 23 additions & 0 deletions shvatka/tgbot/dialogs/game_manage/handlers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import asyncio
from datetime import date, datetime, time
from io import BytesIO
from typing import Any
Expand All @@ -16,6 +17,8 @@
from shvatka.core.services.scenario.scn_zip import pack_scn
from shvatka.core.utils.datetime_utils import TIME_FORMAT, tz_game
from shvatka.core.views.game import GameLogWriter, GameLogEvent, GameLogType
from shvatka.infrastructure.crawler.game_scn.uploader.forum_scenario_uploader import upload
from shvatka.infrastructure.crawler.game_scn.uploader.game_mapper import map_game_for_upload
from shvatka.infrastructure.db.dao.holder import HolderDao
from shvatka.tgbot import states
from shvatka.tgbot.views.jinja_filters import datetime_filter
Expand Down Expand Up @@ -171,6 +174,26 @@ async def publish_game(c: CallbackQuery, widget: Button, manager: DialogManager)
await manager.start(states.GamePublishSG.prepare, data={"game_id": game_id})


async def to_publish_game_forum(c: CallbackQuery, widget: Button, manager: DialogManager):
await c.answer()
game_id = manager.dialog_data["my_game_id"]
await manager.start(states.GamePublishSG.forum, data={"game_id": game_id})


async def publish_game_forum(m: Message, widget: Any, manager: DialogManager):
username, password = map(str.strip, m.text.split("\n", maxsplit=1))
game_id = manager.dialog_data["my_game_id"]
author: dto.Player = manager.middleware_data["player"]
dao: HolderDao = manager.middleware_data["dao"]
game = await get_full_game(game_id, author, dao.game)
asyncio.create_task(upload_wrapper(game, username, password, m))


async def upload_wrapper(game: dto.FullGame, username: str, password: str, m: Message):
await upload(map_game_for_upload(game), username, password)
await m.answer("Сценарий успешно загружен на форум")


async def get_excel_results_handler(c: CallbackQuery, widget: Button, manager: DialogManager):
game_id = manager.dialog_data["game_id"]
dao: HolderDao = manager.middleware_data["dao"]
Expand Down
12 changes: 12 additions & 0 deletions shvatka/tgbot/dialogs/game_publish/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from shvatka.tgbot import states
from .getters import get_org
from .handlers import process_publish_message
from ..game_manage.handlers import publish_game_forum

game_publish = Dialog(
Window(
Expand Down Expand Up @@ -37,4 +38,15 @@
state=states.GamePublishSG.prepare,
getter=get_org,
),
Window(
Jinja(
"Пришли логин и пароль от форума схватки.\n"
"В первой строке логин, во второй пароль.\n"
"Например:\n\n"
"cool player name\n"
"mY secure pas$w0rd"
),
MessageInput(func=publish_game_forum, filter=F.text),
state=states.GamePublishSG.forum,
),
)
1 change: 1 addition & 0 deletions shvatka/tgbot/states.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class OrgSpySG(StatesGroup):

class GamePublishSG(StatesGroup):
prepare = State()
forum = State()


class CaptainsBridgeSG(StatesGroup):
Expand Down

0 comments on commit e171135

Please sign in to comment.