Size: a a a

2020 July 13

T

Tishka17 in aiogram [ru]
<Юрий> 👨‍🔬 Чебышев
Переслано от <Юрий> 👨‍🔬 Чебышев
есть идеи как тут избавиться от глобала?
в модуле объявляется:
team_keys_lock: typing.Dict[int, asyncio.Lock]

# запуск по таймеру незадолго до начала игры
async def prepare_game():
   ...
   global team_keys_lock
   team_keys_lock = {team.team_id: asyncio.Lock() for team in teams}


и дальше при определённых проверках
async with team_keys_lock[team.team_id]:
    ...
всё это нужно чтобы некоторые события от одной команды (team) обрабатывались последовательно, а от разных - асинхронно.
А в чем проблема сделать класс?
источник

<Юрий> 👨‍🔬 Чеб... in aiogram [ru]
Tishka17
Как правило классы - неизменяемы, поэтому нет проблем. А вот хранить что-то изменяемое в поле класса - это фу
Лучшее, что я сделал это как раз это
источник

T

Tishka17 in aiogram [ru]
И создавать экземпляр в мейне
источник

<Юрий> 👨‍🔬 Чеб... in aiogram [ru]
Переслано от <Юрий> 👨‍🔬 Чеб...
import asyncio
import typing


class LockFactory:
   _locks: typing.Optional[typing.Dict[int, asyncio.Lock]] = None

   @classmethod
   def get_lock(cls, team_id: int):
       if cls._locks is None:
           cls._locks = {}
       return cls._locks.setdefault(team_id, asyncio.Lock())

попробую вот так, вроде должно получиться
источник

T

Tishka17 in aiogram [ru]
<Юрий> 👨‍🔬 Чебышев
Переслано от <Юрий> 👨‍🔬 Чебышев
import asyncio
import typing


class LockFactory:
   _locks: typing.Optional[typing.Dict[int, asyncio.Lock]] = None

   @classmethod
   def get_lock(cls, team_id: int):
       if cls._locks is None:
           cls._locks = {}
       return cls._locks.setdefault(team_id, asyncio.Lock())

попробую вот так, вроде должно получиться
Тот же глобал но в классе
источник

<Юрий> 👨‍🔬 Чеб... in aiogram [ru]
Tishka17
Тот же глобал но в классе
Да, я понял
источник

T

Tishka17 in aiogram [ru]
Если ты в класс методе лазишь в поля класса на запись - ты делаешь херню
источник

Y

Yan in aiogram [ru]
Tishka17
Ну я чёт там навертел дохуя
А нельзя обернуть все в сессию, где хранится весь стек вызовов?
источник

<Юрий> 👨‍🔬 Чеб... in aiogram [ru]
Tishka17
И создавать экземпляр в мейне
Создать экземпляр, передавать в мидлварю и оттуда этот экземпляр целиком передавать в хендлер (хендлеров кстати у меня 100+, а лок нужен в одном, это ничего?)
И в хендлере уже достать конкретный лок
источник

T

Tishka17 in aiogram [ru]
Технопёс
начинается :D
У меня сейчас идея такая:
1. Стейтмашина ака window manager. Для переходов между диалогами.
2. Диалог - набор с шагов с переходами, обработчики завершения, старта и т.п
3. Стейт - набор виджетов
4. Виджет - текст/кнопки/ввод текста
источник

q

quavo in aiogram [ru]
<Юрий> 👨‍🔬 Чебышев
Создать экземпляр, передавать в мидлварю и оттуда этот экземпляр целиком передавать в хендлер (хендлеров кстати у меня 100+, а лок нужен в одном, это ничего?)
И в хендлере уже достать конкретный лок
это же по сути один ключ в словаре
источник

T

Tishka17 in aiogram [ru]
<Юрий> 👨‍🔬 Чебышев
Создать экземпляр, передавать в мидлварю и оттуда этот экземпляр целиком передавать в хендлер (хендлеров кстати у меня 100+, а лок нужен в одном, это ничего?)
И в хендлере уже достать конкретный лок
Не обязательно через мидлварю. Ты можешь хэндлер сделать методом. Конструировать экземпляр класса с передачей туда чего угодно и регистрировать уже bound method как реальный хэндлер
источник

q

quavo in aiogram [ru]
ты же в data добавлять будешь
источник

q

quavo in aiogram [ru]
Tishka17
Не обязательно через мидлварю. Ты можешь хэндлер сделать методом. Конструировать экземпляр класса с передачей туда чего угодно и регистрировать уже bound method как реальный хэндлер
😳😳😳
источник

𝖙

𝖙𝖊𝖆 in aiogram [ru]
ребят
источник

𝖙

𝖙𝖊𝖆 in aiogram [ru]
есть готовое решение для бота такого рода @imperia_sale_bot
источник

𝖙

𝖙𝖊𝖆 in aiogram [ru]
?
источник

h

hanna🔪⃤ in aiogram [ru]
𝖙𝖊𝖆
есть готовое решение для бота такого рода @imperia_sale_bot
тлид же(no ad)
источник

AD

Arigato Darigato in aiogram [ru]
Amocrm перестал принимать заявки после создания бота. То есть в личном кабинете там введен токен и мое приложение использует этот токен, значит он тоже в режиме прослушки был. Можно ли как-то восстановить отправку в amocrm при моем работающем боте? В amocrm бот добавлял пользователя в неразобранное после нажатия start и все никакой функциональности у него не было
источник

Е

Евгений in aiogram [ru]
ребзя, сори за тупой вопрос, как сделать чтоб в боте вызывалась func() каждый час?
источник