Я делаю аноним чат но появилась проблема, как сделать когда пользователь ищет собеседника но не самого себя (делаю чтобы не подключалось к самому себе через 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())