Бот для игры в ‘Слова’ для telegram бота
Возможно ли сделать телеграм бота для игры в слова на языке программирования python (Пользователь пишет слово, а бот придумывает слово на последнюю букву предыдущего. Например: Пользователь: машинА Бот: АрбуЗ Пользователь: ЗебрА И так далее) если да, то подскажите библиотеку
Отслеживать
787 1 1 золотой знак 6 6 серебряных знаков 19 19 бронзовых знаков
задан 4 мар в 5:48
15 3 3 бронзовых знака
Вам стоит уточнить для чего именно Вы желаете сделать бота? Телеграм/Дискорд или просто исполняемый скрипт в python (так как каждая реализация имеет свои нюансы). В любом случае, самый простой и минимально-исполняемый код для выполнения этой задачи Вы можете сделать просто используя модуль random и списком заранее сформированных слов, где поиск выполняется по last_letter = word[-1] . Во всяком случае, Вам нужно уточнить вопрос и добавить свое минимальное решение, чтобы Вам смогли корректно оказать поддержку.
4 мар в 6:00
Для телеграмм бота, а можно как то сделать так что бы бот сам слова придумывал?
4 мар в 6:07
Так и тем более тогда бот будет выводить случайное слово, а мне надо что бы это слово начиналось с быквы предедущего
4 мар в 6:14
Чтобы он сам слова придумывал, можете имплементировать нейросети, но тогда Вам придется их заранее обучить или постараться найти где-то заранее обученные. По второму комментарию, там же указано про last_letter , бот будет выводить случайное слово и списка, которое начинается на последнюю букву. Для этого будет совершаться проверка в этом списке. Все же не так просто 🙂
4 мар в 6:43
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Я сделал для Вас условно рабочий код с использованием нейронной сети от OPEN AI (модель GPT2 — text-davinci-002) . Это Вам для затравки, читайте документацию, изучайте, развивайте и у Вас все получится. Здесь не прописано множество ограничений, таких как проверка того, чтобы пользователь вводил корректный ответ с учетом последнего слова бота, исключения на буквы «ь, ы» ну и прочих, возможно нестандартных ответов бота, которые нужно протестировать, но которые обязательно будут.
Успехов Вам в изучении.
Код:
import telebot import openai bot = telebot.TeleBot("") # Регистрируется через BOT FATHER в TELEGRAM openai.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 " 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("") # Регистрируется через BOT FATHER в TELEGRAM openai.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 " 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()
Как сделать игру «Города» для бота теллеграм на Python?
Здравсвуйте, я Junior Python-программист. Я умею делать Телеграмм-ботов на Python с помощью пакета pyTelegramBotAPI. И я хочу добавить к своему боту игру «Города» (Города́ — игра, в которой каждый участник в свою очередь называет реально существующий город любой страны, название которого начинается на ту букву, которой оканчивается название предыдущего города). Я не могу сделать цикл игры так, чтобы бот видил последнюю букву города и называл на эту букву тот или иной город. Надеюсь вы мне поможете с моим вопросом.
Отслеживать
задан 19 янв 2021 в 18:08
3 3 3 бронзовых знака
в чём сложность найти последнюю букву ? покажите ваши неправильные попытки. города для ответа откуда планируете брать ?
Бот для игры
Решил написать скриптик для игры в виде бота. Не знаю данный язык рынулся смотреть ютуб и видеоуроки по созданию ботов, нахождения картинки на экране и тд. Вроде сделал, вроде всё правильно, а всё равно не работает, помогите пожалуйста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
import multiprocessing.dummy as multiprocessing from termcolor import colored import pyautogui import winsound import keyboard import time import os cg = None result = 0 big_gg = ["gbgg", "bbgg", "rbgg", "pbgg", "obgg"] simple_gg = ["rgg", "bgg", "ggg", "ogg"] big_gems = ["bbg", "gbg", "pbg", "rbg"] all_gg = ["rgg", "bgg", "ggg", "ogg", "gbgg", "bbgg", "rbgg", "pbgg", "obgg"] all_gems = ["bbg", "gbg", "pbg", "rbg", "rgg", "bgg", "ggg", "ogg", "gbgg", "bbgg", "rbgg", "pbgg", "obgg"] def finder(a): global result time.sleep(1) ah1 = a[:len(a)//2] ah2 = a[len(a)//2:] x1 = ah1[:len(ah1)//2] x2 = ah1[len(ah1)//2:] x3 = ah2[:len(ah2)//2] x4 = ah2[len(ah2)//2:] c1 = x1[:len(x1)//2] c2 = x1[len(x1)//2:] c3 = x2[:len(x2)//2] c4 = x2[len(x2)//2:] c5 = x3[:len(x3)//2] c6 = x3[len(x3)//2:] c7 = x4[:len(x4)//2] c8 = x4[len(x4)//2:] def t1(x): global result for i in x: x = pyautogui.locateCenterOnScreen('images/'+i+'.png', confidence=0.8) if x == None: result += 1 p = multiprocessing.Pool() results = p.map(t1, [c1, c2, c3, c4, c5, c6, c7, c8]) p.close() p.join() if result == \len(cg): result = 0 keyboard.send("Space") print(colored('Small Gem.', 'yellow'), colored('Skipped.', 'green')) finder(cg) else: result = 0 print(colored('Find a gem. Stopping. ', 'green')) for s in range(0, 2): winsound.Beep(1000, 300) p.close() os.system('cls') choice = input('1. Big Golden Gems\n2. Simple Golden Gems\n3. Big Gems\n4. All Golden Gems\n5. All Gems\n\nInput: ') def ch(): global cg if choice == '1': cg = big_gg finder(big_gg) elif choice == '2': cg = simple_gg finder(simple_gg) elif choice == '3': cg = big_gems finder(big_gems) elif choice == '4': cg = all_gg finder(all_gg) elif choice == '5': cg = all_gems finder(all_gems) else: print('Please type number of function. ') ch()
Как написать Telegram-бота на Python: делаем ремайндер
Создаём простого бота-ремайндера в Telegram на языке Python, единственная задача которого — напоминать пользователю о важных делах.
В этой иструкции разберем процесс создания простого бота-ремайндера, единственная задача которого — напоминать пользователю о важных делах. Это базовая конструкция, которую можно усложнять и менять под свои потребности.
Инструкция подойдет для новичков, которые знают Python на базовом уровне, пробовали писать код и установили на компьютер редактор кода.
Первый этап: подготовка проекта и развертывание окружения
Найдем в поиске Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой иструкции это будут Elbrus Reminder и elbrus_reminder_bot соответственно.
После этого BotFather пришлет сообщение с токеном и ссылкой на бот:
Токен нужно хранить в безопасном месте — он дает контроль над ботом. и, как следствие, позволяет получить доступ к данным пользователей.
На время закроем Telegram и создадим на компьютере папку с именем проекта: например, reminder_bot. Откроем папку в среде разработки и создадим рабочий файл с понятным названием — bot.py.
Откроем терминал редактора кода и создадим для проекта новое окружение. В среде разработки с помощью команды python -m venv .venv создадим папку с окружением .venv .
Если окружение не активировалось автоматически, можно сделать это вручную, прописав путь к файлу активации в формате source .venv/bin/activate , где source — команда языка программирования Bash. Другой вариант — перезапустить среду разработки. Он работает для Visual Studio Code, но нужно предварительно принять предложение редактора привязать среду к папке проекта сразу после создания окружения.
Практика создания нового окружения под каждый проект позволяет повыстить безопасности и стабильность проекта — в окружении вы можете использовать только те библиотеки и их версии, которые требуются в проекте. Если в проекте появятся дополнительные функции, все изменения будут храниться в этом окружении. При этом оно будет изолировано от других окружений и проектов — это повысит безопасность проекта.
Второй этап: подключаем библиотеки
Проект создан и окружение готово: пора переходить к написанию кода. По правилам хорошего тона в первую очередь через import добавляем несколько предустановленных библиотек Python. При создании бота нам пригодятся logging и time , которые отвечают за определение времени и логирование сообщений.
import time import logging
Затем добавим асинхронную библиотеку aiogram, на основе которой будет работать бот. Она, например, определяет, какое сообщение пришло, как его нужно обработать и какие порты нужны. Сначала устанавливаем ее через терминал командой pip install aiogram , а в редакторе кода пишем следующее:
from aiogram import Bot, Dispatcher, executor, types
Из этой библиотеки нам нужны только отдельные модули и классы — все ее возможности для создания базовой версии бота не пригодятся. Поэтому вместо одиночного import использована команда from <> import <> .
Когда библиотеки импортированы, создадим переменные с токеном бота и сообщением, которое он будет отправлять пользователю. Вы можете заменить это сообщение на любое другое, которое вам необходимо. Это статические переменные, поэтому их имена написаны капслоком:
TOKEN = "здесьбудетваштокенот от BotFather" MSG = "Программировал ли ты сегодня, <>?"
Токены, ключи и прочие данные для настройки проекта лучше загружать более безопасным способом (например, создавать переменные окружения или файлы конфигурации). Но в данном случае сделаем все в одном файле для наглядности, а примеры более безопасной работы с такими переменными разберем в следующих постах.
Теперь создадим экземпляр класса Bot , передав ему в качестве аргумента наш токен, и экземпляр класса Dispatcher (dp), который в качестве аргумента получит bot . В результате получаем связку объекта класса bot с ключем, который привязан к боту, и диспетчера, который привязан к этому боту:
bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot)
Следующим шагом добавим конструкцию под названием декоратор ( massage_handler ) — она помогает получить из диспетчера нужный функционал. В качестве аргумента прописываем команды, которые обрабатывает декоратор — в данном случае это команда /start , которая запускает бот.
@dp.message_handler(commands=['start'])
Под декоратором прописываем функцию, которая будет обрабатывать команду /start и определяет логику, в соответствии с которой будет работать бот. Поскольку мы работаем с асинхронной библиотекой, функция тоже должна быть асинхронной. Для этого перед указанием def добавим ключевое слово async :
async def start_handler(message: types.Message):
Функция приветствует пользователя и обрабатывает сообщение, которое он отправляет в ответ. Из сообщения можно получить информацию о пользователе, который его прислал, время отправки и его ID.
Создаем переменную и сохраняем в ней user id :
user_id = message.from_user.id
Затем получаем из сообщения короткое и полное имя пользователя:
user_name = message.from_user.first_name user_full_name = message.from_user.full_name
Для того, чтобы в логах отображалась информация о пользователе, передаем в виде текста ID и полное имя, а также используем возможности библиотеки time , чтобы определить время, когда писал пользователь:
logging.info(f' ')
Здесь отойдем в сторону и проверим корректность работы модуля time . Сделать это можно в терминале: для этого напишем import time , а затем — time.asctime
Вернемся к коду. Поскольку функция, которую мы используем, асинхронна, вместо обычного для функций return используем await :
await message.reply(f"Привет, !")
Ответить пользователю в боте можно несколькими способами — в данном случае используем reply. Выше в переменной MSG мы задали стандартное сообщение: «Программировал ли ты сегодня, <>?». Зададим частоту напоминаний: семь раз каждые семь суток (60х60х24 — количество секунд в одних сутках) с момента отправки команды /start боту от пользователя:
for i in range(7): await asyncio.sleep(60*60*24)
Затем настроим отправку сообщения с указанием имени пользователя в этом же цикле:
await bot.send_message(user_id, MSG.format(user_name))
Третий этап: финал
Переходим к финальной части: в конце скрипта напишем несколько строк. Они могут показаться странными для новичка, но это общепринятая практика, к которой многие программисты прибегают при разработке. В этой строке мы проверяем, равна ли переменная __name__ строке «__main__» . Это условие всегда будет True, если мы запускаем этот файл как python-скрипт через терминал:
if __name__ == '__main__':
Теперь делаем нашего бота доступным в сети:
executor.start_polling(dp)
Сохраняем файл. Запускаем бота в терминале, открытом в папке проекта, с помощью команды python bot.py .
Вернемся в BotFather и перейдем по ссылке, которую получили вместе с токеном. Нажимаем «Начать» — готово, бот, написанный меньше, чем в 30 строк, работает.
Так выглядит его код целиком:
import time import logging import asyncio from aiogram import Bot, Dispatcher, executor, types TOKEN = "здесьбудетваштокенот@BotFather" MSG = "Программировал ли ты сегодня, <>?" logging.basicConfig(level=logging.INFO) bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot) @dp.message_handler(commands=["start"]) async def start_handler(message: types.Message): user_id = message.from_user.id user_name = message.from_user.first_name user_full_name = message.from_user.full_name logging.info(f' ') await message.reply(f"Привет, !") for i in range(7): await asyncio.sleep(60*60*24) await bot.send_message(user_id, MSG.format(user_name)) if __name__ == "__main__": executor.start_polling(dp)
В следующий раз подробно расскажем, как написать подобный бот на языке программирования JavaScript. Подписывайтесь, чтобы не пропустить инструкцию.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.