Я хочу сделать чат рулетку на python в своём исполнении с помощью #TeleBot (telebotapi)

Рейтинг: 0Ответов: 1Опубликовано: 19.02.2023

Я хочу сделать чат рулетку с помощью Telegram бота (TeleBotApi)

Сделал тип БД из словаря, (код приложу ниже) в общем юзер вводит число (от 1 до 1000000) и если другой человек ввёл это же число то их соединяет вместе и они общаются.

Сделал разные условия и проверки для того чтобы пользователь ввёл именно число и число в топ диапазоне который я задавал. Так вот я хочу сделать чтобы в словаре хранилось в качестве ключа число (то что ввёл юзер), а в качестве значения список который состоит из id чатов.

Так вот мне надо сделать проверку если в массиве уже есть данное число то соединить их вместе, если в массиве есть данное число, но люди уже общаются то выдать ошибку, если же такого число нет то создать его и добавить его в словарь <номер> -> <id чата в списке>.

Я пытался сам что то реализовать но пока оно работает не так как я ожидал (тупо ошибка).

Так вот чуток кода ниже (код не весь!): (мне нужны проверки и функционал (но функционал не обязательно, просто если вам не сложно) рулетки) (и да пишу я на TeleBot не давно, поэтому тапками не бросать).

<импорты>
tconv = lambda x: time.strftime("%H:%M:%S %d.%m.%Y", time.localtime(x))
rulette = {"-1":["none","none"]}
activ = ["none"]
def call_message(message):
  global  activ
  print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " использует /call")
  if str(message.chat.type)=="private":
    print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " Чат является приватным!")
    for i in activ:
      if str(i) == str(message.chat.id):
        print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " При использовании /call произошла ошибка!")
        bot.send_message(message.chat.id, "Похоже вы уже в звонке!")
        break
      else:
        print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " При использовании /call всё было хорошо!")
        bot.send_message(message.chat.id, "В следующем сообщении введите число от 1 до 100000 и следуйте инструкциям")
        bot.register_next_step_handler(message, next_call)
  else:
    print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " Чат не является приватным!, а является "+str(message.chat.type))
    bot.send_message(message.chat.id,"Ошибка похоже чат не является приватным (лс), зайдите в приватный чат(лс)!!!")
def next_call(message):
  global  rulette,activ
  if str(message.content_type) == "text" and message.text.isdigit():
      if int(message.text)<0 or int(message.text)==0 or int(message.text)>1000000 or int(message.text)==1000000:
        print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + str(message.text)+ "- Число не подходит вышеперечисленным требованиям!")
        bot.send_message(message.chat.id,"Ваше число ("+str(message.text)+") не подходит требованиям (число должно быть от 1 до 1000000 (милионна))")
      else:
        print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @ " + str(message.from_user.username) +" "+ str(message.text) + " - Число  подходит вышеперечисленным требованиям!")
        bot.send_message(message.chat.id,"Ваше число было принято, ожидайте!")
        time.sleep(1)
        if str((rulette[str(message.text)])) != str(2):
          if rullete(rulette,message.text) ==True:
            print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " Чат не занят")
            rulette[str(message.text)] = a.append(str(message.chat.id))
            print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " Вошёл в чат  ("+str(message.chat.id)+")")
          else:
            rulette[str(message.text)] = str(message.chat.id)
            print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + " Создал очередь ("+str(message.text)+")")
            bot.send_message(message.chat.id,"Так как это число никто из пользователей не написал, то вы 1, просто ждите! (чтобы закончить звонок/ожиданеие собеседника напишите /stopcall)")
            rulette[str(message.text)] = a[str(message.chat.id),]
            activ.append(str(message.chat.id))
        else:
          bot.send_message(message.chat.id,"Внимание в этом канале уже общаются 2 участника, пожалуйста введите другое число (ваше число:"+str(message.text)+")")
          print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + "В этом чате достигнут лимит участников!")
  else:
    print("DEBUG " + "time=" + " " + str(tconv(message.date)) + " id=" + str(message.from_user.id) + " name= @" + str(message.from_user.username) + str(message.text)+ "- Строка не подходит вышеперечисленным требованиям!")
    bot.send_message(message.chat.id,"Ваше сообщение не соответствует критериям!")

  

Ответы

▲ 0

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

# 1 - 100
rooms = {'1': ['id1'],
         '2': ['id3']
         }

user_choice = input('Введи число от 1 до 100: ')
user_id = 'user_id'

def connect():
    if user_choice > 100:
        # Говорим юзеру о привышении
        return
    if user_choice in rooms.keys():
        rooms[user_choice].append(user_id)
        # соединяем юзеров
        close_room() # закрываем конмату для других пользователей
    else:
        rooms[user_choice] = [user_id] # Создаем комнату, если такой нет


def close_room():
    rooms.pop(user_choice)

connect()

Как по мне, проще записывать id пользователей, а потом по ним приглашать в комнату