Как я использую свои знания программирования на Python, чтобы писать код для счастья

Мы слышим о людях, использующих программирование, чтобы анализировать эффективность определенных лекарств, делать выводы, чтобы понять профили клиентов, делать прогнозы, чтобы узнать, сколько будет стоить недвижимость через 10 лет, и этот список можно продолжить. Когда я преследовал девушку, меня внезапно осенило, можно ли использовать программирование, чтобы сделать что-то особенное для моего признания в любви, тем более что девушка не была экспертом в этой области (если да, Думаю, тебе нужно улучшить свою игру, ха-ха). Эти случайные мысли начинались с малого, которые постепенно превратились в твердую идею, когда я собрал все вместе и, наконец, однажды, бум, превратился в бота Telegram!

Поскольку День святого Валентина не за горами, я надеюсь, что эта статья может послужить руководством или даже вдохновением для тех, кто планирует признаться и поразить свое свидание. Люди могут сказать, что вы портите рынок, но я думаю, что когда дело доходит до искренности в отношении вашего потенциального свидания, оно должно быть особенным и запоминающимся!

Получение ключа API Telegram Bot от Botfather

Я использую язык программирования Python, и, как известно большинству программистов, для взаимодействия с внешним веб-сайтом или приложением нам понадобится ключ интерфейса прикладного программирования (API), чтобы Python «разговаривал» с Telegram в моем случае.

Перед этим нам нужно будет создать бота в Telegram. В приложении Telegram или Telegram Desktop найдите этого бота под названием «BotFather».

После запуска бота будет показан список команд, но мы должны использовать команду / newbot для создания нового бота. Затем бот предложит вам ввести имя для вашего бота, обратите внимание, что это будет имя, которое люди ищут в Telegram для доступа к вашему боту, и его можно изменить даже после создания. После этого необходимо имя пользователя в том виде, в котором оно заканчивается на бота, например xxxbot, но обратите внимание, что это не может быть изменено после создания бота. Как только ваш бот будет успешно создан, вы можете начать поиск своего бота в Telegram, используя введенное вами имя (например, myfirstbot123 для меня). На что мы должны обратить внимание, так это на уникальный токен, предоставленный нам для управления ботом с помощью API.

Интеграция Python с Telegram

Получив ключ API, мы теперь можем редактировать бота в Python. Мы будем использовать пакет библиотеки python-telegram-bot. В этом пакете используется модуль logging, поэтому нам нужно будет настроить его изначально. Затем мы вводим ключ токена API бота Telegram в код.

# import necessary libraries
import logging
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler, CallbackContext
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
# set up logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# input our telegram bot unique api token
TOKEN = 'INSERT YOUR TOKEN HERE!'

Затем мы определяем несколько функций, которые помогут нам начать работу в нашем боте. Необходимая команда - это команда /start, которая запускается, когда пользователь запускает бота. Для простоты мы просто вернем сообщение Testing 123 при запуске бота. Мы встраиваем сообщение, используя update.message.reply_text, что с точки зрения непрофессионала означает, что всякий раз, когда наш бот получает команду или сообщение, он ответит на него текстом. Мы делаем то же самое для команды /hello, которая возвращает сообщение Hello World! после того, как пользователь запустит его, а также смайлик 😀 эмодзи. Вы можете сослаться на юникоды эмодзи здесь. Обратите внимание, что я также настроил регистратор ошибок, чтобы показывать мне сообщение об ошибке для облегчения отладки.

def start(update, context):
    # send a message once the bot is started/start command is ran
    update.message.reply_text('Testing 123')
    
def hello(update, context):
    # send a message once the command /hello is keyed
    update.message.reply_text('Hello World! \U0001F600')
# for error debugging
def error(update, context):
    logger.warning('Update "%s" caused error "%s"', update, context.error)

Последним шагом будет создание нашей main() функции. программа обновления прочитает наш API токенов и зарегистрирует все обработчики, которые мы настроили для нашего бота. Обратите внимание, что для каждой команды, которую мы собираемся создать, нам нужно будет добавить обработчик команд. Бот запустится при запуске updater.start_polling().

# to start the bot
def main():
    # setup updating together with our telegram api token
    updater = Updater(TOKEN, use_context=True)
# get the dispatcher to register handlers
    dp = updater.dispatcher
# add command handlers for different command
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("hello", hello))
# error logging
    dp.add_error_handler(error)
# start the bot
    updater.start_polling()
# set the bot to run until you force it to stop
    updater.idle()
if __name__ == '__main__':
    main()

Собрав все вместе, пробуем нашего бота в самом Telegram. После запуска бота было возвращено сообщение Testing 123. Аналогично команде /hello Hello World! 😀 был возвращен.

Кодирование кнопки да / нет

В признании в любви мы однозначно ждем от свидания ответа, да / нет. Пока что наш бот Telegram может возвращать сообщения только после того, как пользователь выполнит определенную команду. Есть ли у бота возможность отображать меню, чтобы пользователь мог выбрать / щелкнуть нужную кнопку? Да, в Telegram-боте есть такая функция, это кнопки.

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

Для приведенного ниже кода наш бот отобразит вопрос «БУДЬТЕ МОЕЙ ДЕВОЧКОЙ, ОК?» вместе с двумя кнопками Да и Нет при выполнении команды /confession. Не забудьте добавить обработчик этой команды в основной код функции, как указано выше.

# button display
def confession(update, context: CallbackContext)-> None:
    keyboard = [
        [InlineKeyboardButton("Yes", callback_data='yes'),
        InlineKeyboardButton("No", callback_data='no')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('BE MY GIRL OK?', reply_markup=reply_markup)
dp.add_handler(CommandHandler("confession", confession))

Как показано на скриншоте выше, «БЫТЬ МОЕЙ ДЕВОЧКОЙ, ОК?» отображался вместе с двумя кнопками. Нажатие кнопок на данный момент ничего не даст и не вернет, поскольку мы еще не настроили его. Для этой части мы настроили другую команду с именем /confession_reply, которая будет делать разные вещи для разных кнопок, нажимаемых пользователем (например, Да или Нет), используя программный синтаксис if-else. Если пользователь нажал Да, бот вернет 👫💝 смайлики. Если пользователь нажал кнопку Нет, я попытался проявить немного дерзости, вернув сообщение «Пожалуйста, попробуйте еще раз, мы иногда допускаем опечатки 😤». Обратите внимание, что вместо добавления обычного обработчика команд в нашу основную функцию нам нужно будет вернуть обработчик запроса обратного вызова для этой функции.

def confession_reply(update, context):
    query = update.callback_query
    if query.data == 'yes':
        context.bot.edit_message_text(chat_id=query.message.chat_id,
                        message_id=query.message.message_id,
                        text='\U0001F46B\U0001F49D', disable_web_page_preview = 0)
    else:
        context.bot.edit_message_text(chat_id=query.message.chat_id,
                        message_id=query.message.message_id,
                        text='Please try again, we make typing errors sometimes \U0001F624' , disable_web_page_preview = 0)
dp.add_handler(CallbackQueryHandler(confession_reply))

Как видно на скриншоте, я настроил своего бота для признания, чтобы он возвращал следующее. Вам нужно проявить творческий подход, чтобы произвести впечатление на своего партнера, независимо от его / ее ответа.

Размещение вашего бота Telegram (необязательно)

Эта часть является необязательной, но до сих пор мы запустили нашего бота Telegram на Jupyter Notebook локально, что означает, что после того, как мы выйдем из него и выключим наш ноутбук, этот бот перестанет работать. Чтобы решить эту проблему, нам нужно будет разместить нашего бота на облачном сервере, который обеспечит работу нашего бота 24/7, и мы можем попросить нашу дату проверить его, когда придет время.

Для развертывания своего бота Telegram на сервере я использовал Heroku, который предлагает бесплатные услуги для пользователей, которым просто нужно место для размещения своего веб-приложения, не требующего высокой пропускной способности. Я не буду вдаваться в подробности здесь, так как в Интернете есть множество руководств, позволяющих это сделать. Если вы столкнетесь с какой-либо проблемой, просто напишите мне в этой статье, и я обязательно помогу!

Вся идея исповеди

Вот и вся техническая сторона создания этого бота Telegram для нашего признания. Вы, вероятно, уже должны почувствовать, что чего-то не хватает или что это слишком просто для использования в качестве инструмента признания. Вам решать, насколько творчески вы сможете произвести впечатление на свидание, но я поделюсь с вами своими, чтобы дать вам несколько идей.

Как видно на моем снимке экрана ниже, для моей команды /start он отобразит приветственное сообщение и список команд, в которых первые 10 будут отвечать на сообщения, а последняя будет командой кнопки, которой я задам вопрос.

Если вам интересно, что я написал для каждой из первых 10 команд, которые будут возвращать сообщения, когда они будут вызваны, они на самом деле покажут небольшие воспоминания о каждой из наших пикников, а также о дате.

Первые 9 из 10 команд будут похожи на приведенные выше, и вы также можете задаться вопросом, почему названия команд такие странные, как /sob, /banhmi или даже /potato? Также обратите внимание на странные интервалы между командами, разве они не странные? Ответ в моей 10-й команде /throwback.

Как показано в сообщении на скриншоте выше, я назвал команды таким образом, чтобы, объединив последний символ каждой команды, вы получили фразу «БУДЬ МОЕЙ ДЕВОЧКОЙ, ОК?». К настоящему времени моя знакомая уже догадалась об истинном намерении этого бота, и когда она нажала последнюю команду /semolaide (что означает «что это» на китайском языке), появится вопрос.

Заключение

Вот и все, что касается этого руководства для ботов Telegram, завтра День святого Валентина. Надеюсь, вы, ребята, почерпнете вдохновение из этого руководства и, надеюсь, найдете дату своей мечты. Помните, что в конце дня вам не нужно беспокоиться о том, как другие относятся к тому, как вы показываете свою любовь / привязанность, важно то, что это подарит вам и вашему партнеру приятные воспоминания на всю жизнь!

Всего доброго всем!