Всем привет. Сегодня столкнулся с проблемой, пытался её решить несколько часов. Помогите пожалуйста!
Код:
async def start_game(message: Message, peer_id: int):
game_id = random.randint(1, 100000)
stake = random.choice(STAKES)
keyboard = create_game_keyboard(game_id)
try:
sent_message = await bot.api.messages.send(
peer_id=peer_id,
message=(
" Набор в игру!\n\n"
"Нажмите на кнопку ниже, чтобы присоединиться!"
),
keyboard=keyboard,
disable_mentions=1,
random_id=game_id,
attachment=photo
)
# Сохранение игры в словарь
games[peer_id] = {
"players": [],
"stake": stake,
"game_id": game_id,
"keyboard": keyboard,
"timeout_task": asyncio.create_task(game_timeout(peer_id, game_id)),
}
# Сохранение данных об игре в MongoDB
game_data = {
"peer_id": peer_id,
"game_id": game_id,
"stake": stake,
"players": [],
"start_time": datetime.utcnow(),
"status": "ongoing"
}
await transactions_collection.insert_one(game_data)
logger.info(f"Игра начата для {peer_id}, ID сообщения: {game_id}")
except Exception as e:
logger.error(f"Ошибка при отправке сообщения для {peer_id}: {e}")
Пытался редактировать, если игра остаётся без пользователей некоторое время:
# Функция для обработки таймаута игры
async def game_timeout(peer_id: int, game_id: int):
await asyncio.sleep(JOIN_TIME)
game = games.get(peer_id)
last_message = game["game_id"]
if game and game["game_id"] == game_id:
if len(game["players"]) < MIN_PLAYERS:
await bot.api.messages.edit(
peer_id=peer_id,
conversation_message_id=last_message,
message=(f"Игра закончена, так как никто в неё не вошёл."), disable_mentions=1
)
del games[peer_id]
else:
await play_game(peer_id)
Сталкивался с ошибками типо:
'int' object has no attribute 'conversation_message_id'
One of the parameters specified was missing or invalid: On
ly one parameter from (cmids, peer_cmids, message_ids) must be undefined
Internal server error
Access denied: me
ssage can not be found
(Ошибки разные, так как пытался решить проблему разными способами).
vkbottle==4.4.1
vkbottle-types==5.199.63.1
motor==3.6.0
pymongo==4.9.1