Бот для игры в 'Слова' для telegram бота

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

Возможно ли сделать телеграм бота для игры в слова на языке программирования python (Пользователь пишет слово, а бот придумывает слово на последнюю букву предыдущего. Например: Пользователь: машинА Бот: АрбуЗ Пользователь: ЗебрА И так далее) если да, то подскажите библиотеку

Ответы

▲ 0Принят

Я сделал для Вас условно рабочий код с использованием нейронной сети от OPEN AI (модель GPT2 - text-davinci-002). Это Вам для затравки, читайте документацию, изучайте, развивайте и у Вас все получится. Здесь не прописано множество ограничений, таких как проверка того, чтобы пользователь вводил корректный ответ с учетом последнего слова бота, исключения на буквы "ь, ы" ну и прочих, возможно нестандартных ответов бота, которые нужно протестировать, но которые обязательно будут.

Успехов Вам в изучении.

Код:

import telebot
import openai

bot = telebot.TeleBot("{Ваш TELEGRAM TOKEN}") # Регистрируется через BOT FATHER в TELEGRAM

openai.api_key = "{Ваш OPEN AI API KEY}" # Нужно быть зарегистированым в OPEN AI и получить токен.


@bot.message_handler(func=lambda message: True)
def game(message):
    # Получение последней буквы слова пользователя
    last_letter = message.text[-1].lower()
    # Получение списка слов из OpenAI GPT-2 модели
    prompt = f"Give me a word that starts with {last_letter}"
    response = openai.Completion.create(
        engine="text-davinci-002",
        prompt=prompt,
        max_tokens=60,
        n=1,
        stop=None,
        temperature=0.5,
    )
    generated_word = response.choices[0].text.strip()

    # Если полученное слово не пустое и начинается с правильной буквы, отправляем его пользователю, иначе выполняем else
    if generated_word and generated_word[0].lower() == last_letter:
        bot.send_message(message.chat.id, generated_word)
    else:
        bot.send_message(message.chat.id, "К сожалению, я не знаю слов на букву " + last_letter)

bot.polling()

Фрагмент отработки данного кода:

введите сюда описание изображения

Дополненный код с реализацией механизма проверки того, что пользователь пишет следующее слово с нужной буквы:

import telebot
import openai

bot = telebot.TeleBot("{Ваш TELEGRAM TOKEN}") # Регистрируется через BOT FATHER в TELEGRAM


openai.api_key = "{Ваш OPEN AI API KEY}" # Нужно быть зарегистированым в OPEN AI и получить токен.

last_letter = None


@bot.message_handler(func=lambda message: True)
def game(message):
    global last_letter  # Объявляем, что будем использовать глобальную переменную

    # Если last_letter пустая, значит это первый ход игры, и нужно получить первое слово от пользователя
    if last_letter is None:
        last_letter = message.text[-1].lower()
        bot.send_message(message.chat.id, "Начнем игру! Введите слово, которое начинается с буквы " + last_letter)
    else:
        first_letter = message.text[0].lower()
        if first_letter != last_letter:
            bot.send_message(message.chat.id,
                             "К сожалению, вы ввели неверное слово. Введите слово, которое начинается с буквы " + last_letter)
        else:
            last_letter = message.text[-1].lower()
            prompt = f"Give me a word that starts with {last_letter}"
            response = openai.Completion.create(
                engine="text-davinci-002",
                prompt=prompt,
                max_tokens=60,
                n=1,
                stop=None,
                temperature=0.5,
            )
            generated_word = response.choices[0].text.strip()
            if generated_word and generated_word[0].lower() == last_letter:
                bot.send_message(message.chat.id, generated_word)
                last_letter = generated_word[-1].lower()
            else:
                bot.send_message(message.chat.id, "К сожалению, я не знаю слов на букву " + last_letter)

bot.polling()