@WowDev
Программист

Kак сделать отдельное выполнение команды aiogram и выполнять другие команды?

Я делаю аноним чат но появилась проблема, как сделать когда пользователь ищет собеседника но не самого себя (делаю чтобы не подключалось к самому себе через while) чтобы у других людей не ожидало пока та команда не выолниться
тип:

1: /search
бот: поиск собеседника...

2: /start
бот молит

Как исправить
Вот код (Aiogram3):

import asyncio
import logging
import sys
import random

from aiogram import Bot, Dispatcher, Router, types
from aiogram.filters.command import Command
from aiogram.enums import ParseMode
from aiogram.types import Message
 
users = {
    "InSearch": [],
    "InChat": {

    }
}

# All handlers should be attached to the Router (or Dispatcher)
bot = Bot("TOKEN", parse_mode=ParseMode.HTML)
dp = Dispatcher()

def search(message: Message) -> int:
    rand_user = random.choice(users["InSearch"])
    while rand_user == message.from_user.id:
        rand_user = random.choice(users["InSearch"])
    return rand_user

@dp.message(Command("start"))
async def command_start_handler(message: Message) -> None:
    await message.answer(f"Привіт!\n\nЛаскаво просимо до Анонім Чату!\nЗдесь ви можете шукати собеседника и общаться як в NektoMe!\nШукати собеседника: /search")

@dp.message(Command("search"))
async def search_user_handler(message: Message) -> None:
    await message.answer("Шукаємо собеседника...")
    users["InSearch"].append(message.from_user.id)
    task = asyncio.create_task(search(message))
    users["InSearch"].remove(message.from_user.id)
    users["InChat"][message.from_user.id] = await task
    await message.answer("Собеседник найден!\n\nБудь ласка, будьте адекватними, За все шо тут сталося ми не отвечаемо\n\n Остановити розмову: /stop")

@dp.message(Command("stop"))
async def stop_chat_handler(message: Message) -> None:
    if message.from_user.id in users["InChat"]:
        await message.answer("Ви завершили розмову")
        await bot.send_message(users["InChat"][message.from_user.id], "Собеседник закінчил розмову")
    else:
        await bot.send_message(message.chat.id, "Тобi потрiбно сначало пошукати собеседника\n\nШукати собеседника: /search")

@dp.message(Command("link"))
async def stop_chat_handler(message: Message) -> None:
    if message.from_user.id in users["InChat"]:
        await message.answer("Ви відправили посилання на ваш аккаунт собеседнику")
        await bot.send_message(users["InChat"][message.from_user.id], "Собеседник скинул вам посилання на свій аккаунт: @{0}".format(message.from_user.username))
    else:
        await bot.send_message(message.chat.id, "Тобi потрiбно сначало пошукати собеседника\n\nШукати собеседника: /search")

@dp.message()
async def echo_handler(message: types.Message) -> None:
    if message.from_user.id in users["InChat"]:
        await bot.send_message(users["InChat"][message.from_user.id], message.text)
    else:
        await bot.send_message(message.chat.id, "Тобi потрiбно сначало пошукати собеседника\n\nШукати собеседника: /search")

async def main() -> None:
    await dp.start_polling(bot)


if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO, stream=sys.stdout) 
    asyncio.run(main())
  • Вопрос задан
  • 269 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы