Бот для создания викторин в Телеграм

Как сделать игру «Города» для бота телеграм на Python?

Игра «Города» — это классическая игра, в которой игроки поочередно называют города, название которых начинается на последнюю букву предыдущего города. Например, если первый игрок называет «Москва», то второй игрок должен назвать город на букву «а», например, «Амстердам».

Если вы хотите создать бота для игры «Города» в телеграме, вам потребуется использовать Python и библиотеку python-telegram-bot. Вот пошаговая инструкция о том, как это сделать.

1. Установка python-telegram-bot
Используйте следующую команду, чтобы установить библиотеку python-telegram-bot:

pip install python-telegram-bot

2. Создание бота в Telegram
Чтобы создать бота в Telegram, необходимо следовать инструкциям на официальном сайте Telegram. В результате вы получите API-токен, который будет использоваться для взаимодействия с телеграм-ботом.

3. Импорт библиотек и настройка бота

Как создать викторину в чат-боте Телеграм с разными результатами в зависимости от набранных баллов


В вашем скрипте Python импортируйте необходимые библиотеки и настройте бота:

import telegram from telegram.ext import Updater, CommandHandler, MessageHandler, Filters # Замените ‘YOUR_API_TOKEN’ на ваш API-токен updater = Updater(token=’YOUR_API_TOKEN’, use_context=True) dispatcher = updater.dispatcher

4. Создание команды /start
Добавьте обработчик для команды «/start», который будет отправлять приветственное сообщение:

def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text=»Привет! Добро пожаловать в игру ‘Города’!») start_handler = CommandHandler(‘start’, start) dispatcher.add_handler(start_handler)

5. Создание обработчика для сообщений
Добавьте обработчик для всех входящих сообщений, который будет проверять, начинаются ли они с буквы:

def echo(update, context): message = update.message.text if message.isalpha(): # Ваш код для проверки, что город существует и название его находится на правильную букву echo_handler = MessageHandler(Filters.text Города» для телеграм-бота на Python. Вы можете добавить дополнительные функции, например, лидерборд или ограничения на время отвечать, чтобы сделать игру более интересной.

Источник: qaa-engineer.ru

Создаем телеграм-бота с использованием Spring Boot Pt.3: Quiz Bot

Java-университет

ЧАСТЬ 1 ЧАСТЬ 2 К сожалению, первая версия статьи не пролезла в лимит символов, так что заканчиваю здесь: QuizHandler:

Заполняем базу данных

Здесь мы запишем наши вопросы по аналогии со скриптом инициализации БД.
DELETE FROM java_quiz; INSERT INTO java_quiz (question, answer_correct, option1, option2, option3) VALUES (‘What is a correct syntax to output «Hello World» in Java?’, ‘System.out.println(«Hello World!»);’, ‘print(«Hello World!»);’, ‘sout(«Hello World!»);’, ‘Systemout.print(«Hello world!»);’), (‘What is the correct way to create an object called foo of Bar class?’, ‘Bar foo = new Bar();’, ‘Foo bar = new Foo();’, ‘Bar foo() = new Foo();’, ‘Foo bar() = new Bar();’), (‘Which operator can be used to compare two values?’, ‘==’, ‘=’, ‘

Еще по теме:  Как вставить кнопку в канале Телеграм

Осталось только поправить application.yaml:

bot: name: JavaQuiz token: 1234567:AAF0Wru1Z60p8vPtKihx3odbwSv9O0y_-MM spring: datasource: url: jdbc:postgresql://ec2-54-75-199-252.eu-west-1.compute.amazonaws.com:5432/d5p9skg6nin3mh?user=bozuqwnhjhoublpassword=

Если мы все сделали правильно, то запуская main не увидим стектрейса, даже наоборот:

. ____ _ __ _ _ /\ / ___’_ __ _ _(_)_ __ __ _ ( ( )___ | ‘_ | ‘_| | ‘_ / _` | \/ ___)| |_)| | | | | || (_| | ) ) ) ) ‘ |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.4.RELEASE) 2020-10-02 19:27:43.081 INFO 14536 — [ main] com.whiskels.telegram.App : Starting App on Kuzmin with PID 14536 (D:utilitiesforJavaRushtargetclasses started by whiskels in D:utilitiesforJavaRush) 2020-10-02 19:27:43.087 INFO 14536 — [ main] com.whiskels.telegram.App : No active profile set, falling back to default profiles: default 2020-10-02 19:27:44.014 INFO 14536 — [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2020-10-02 19:27:44.131 INFO 14536 — [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 102ms. Found 2 JPA repository interfaces. 2020-10-02 19:27:44.774 INFO 14536 — [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2020-10-02 19:27:44.885 INFO 14536 — [ main] org.hibernate.Version : HHH000412: Hibernate Core 2020-10-02 19:27:45.053 INFO 14536 — [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations 2020-10-02 19:27:45.278 INFO 14536 — [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 — Starting. 2020-10-02 19:27:46.770 INFO 14536 — [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 — Start completed. 2020-10-02 19:27:46.790 INFO 14536 — [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect 2020-10-02 19:27:49.731 INFO 14536 — [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2020-10-02 19:27:49.741 INFO 14536 — [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit ‘default’ 2020-10-02 19:27:50.817 INFO 14536 — [ main] c.g.x.bots.TelegramBotAutoConfiguration : Starting auto config for telegram bots 2020-10-02 19:27:50.830 INFO 14536 — [ main] c.g.x.bots.TelegramBotAutoConfiguration : Initializing API without webhook support 2020-10-02 19:27:50.831 INFO 14536 — [ main] c.g.x.bots.TelegramBotAutoConfiguration : Registering polling bot: JavaQuiz 2020-10-02 19:27:51.556 INFO 14536 — [ main] com.whiskels.telegram.App : Started App in 9.196 seconds (JVM running for 10.023)

Попробуем пообщаться с нашим ботом: ЗнакомимсяСоздаем телеграм-бота с использованием Spring Boot Pt.3: Quiz Bot - 1ИграемСоздаем телеграм-бота с использованием Spring Boot Pt.3: Quiz Bot - 2Просим помощиСоздаем телеграм-бота с использованием Spring Boot Pt.3: Quiz Bot - 3Готово! Мы написали квиз-бота. Теперь нам предстоит огромная работа — нужно:

  • разобраться в написанном сегодня коде;
  • почитать документацию Spring Data;
  • добавить логгер;
  • заняться рефакторингом;
  • применить паттерны проектирования;
  • сделать возможным просить помощь не только при State.NONE;
  • добавить новый функционал;
  • списки лидеров;
  • выдавать только уникальные вопросы;
  • категории вопросов.
Еще по теме:  Как понять кто просмотрел пост в Телеграм канале

Надеюсь, эта двойная статья была вам полезна. Если так — ставьте звездочку в моем репозитории, мне будет приятно! При возникновении вопросов — обсудим их в комментариях. И напоследок — схема проекта: Создаем телеграм-бота с использованием Spring Boot Pt.3: Quiz Bot - 4

UPDATE 12.10: Код проекта выложил на гит as is без изменений

Источник: javarush.com

Создаем Telegram-бот для розыгрышей за подписку

banner banner Наверняка вы видели конкурсы в стиле «подпишись на всех спонсоров и выиграй что-то там». Сегодня мы расскажем, как создать бота для проведения таких конкурсов на Python своими руками, без использования сторонних сервисов и конструкторов. Фактически вы сможете просто скопировать исходный код, залить его на хостинг, и у вас будет свой собственный бот. * Спойлер: исходный код Telegram-бота для розыгрышей за подписку находится в конце статьи.

Какие задачи решает Telegram-бот для розыгрышей

  • Возможность сбора базы пользователей — в текущем виде бот сохраняет ID лишь тех пользователей, которые подписаны на все указанные каналы. Однако никто не мешает немного доработать его и сохранять ID всех юзеров, которые с ним взаимодействовали.
  • Возможность продажи мест в списке спонсоров — хоть технически бот никак не связан с продажами, его функционал позволяет предлагать потенциальным реклам место в списке спонсоров.
  • Парсинг данных — так как все подобные Telegram-боты требуют наличия прав администратора для проверки подписчиков, то чисто технически с его помощью можно собирать статистическую информацию из спонсорских каналов. Однако учтите, что несанкционированное использование и тем более обнародование такой информации в лучшем случае испортит вашу репутацию. А в худшем может обернуться проблемами с законом.

Впрочем, это лирика — перейдем к алгоритму.

Принцип работы Telegram-бота для проведения розыгрышей

На человеческом языке алгоритм бота устроен следующим образом:

  1. Бот прослушивает свои ЛС, отвечая на сообщения пользователей.
  2. После получения сообщения от пользователя бот загружает список спонсорских каналов из файла channels.txt.
  3. Бот поочередно проверяет наличие пользователя среди подписчиков, администраторов или создателей в каждом канале из файла.
  4. Если пользователь не подписан на один или более каналов из списка, бот выдает сообщение «Ты не молодец» и предлагает подписаться на каналы.
  5. Если пользователь подписан на все каналы, бот выдает сообщение «Ты молодец», проверяет наличие ID пользователя в файле users.txt и записывает ID, если его еще нет в этом файле.
Еще по теме:  Где найти видеосообщения Телеграмма на компьютере

Для удобства в боте реализована кнопка «Готово», однако отдельно рассматривать алгоритм ее работы применительно к задаче «провести конкурс» нецелесообразно — по сути, реакция бота будет такой же, как и на любой другой текст. Просто нажать на кнопку многим пользователями удобнее — поэтому мы добавили и ее.

Пошаговая инструкция, как создать Telegram-бот для проведения розыгрышей своими руками

Создание Telegram-бота для розыгрышей максимально простое, если сравнивать с прочими Telegram-ботами, достаточно лишь:

1. Авторизоваться на pythonanywhere (либо другом хостинге, поддерживающем работу с Python).

2. Запустить Bash-консоль, дождаться настройки сервера.

3. Подключиться к API Telegram с помощью модуля pyTelegramBotAPI, для этого в консоль вводим:

pip3.9 install —user pyTelegramBotAPI

import telebot

from telebot import types

bot = telebot.TeleBot(‘ТОКЕН СЮДА’)

def read_channel_ids(file_path):

with open(file_path, ‘r’) as file:

channel_ids = [int(line.strip()) for line in file]

return channel_ids

def save_user_id(user_id, file_path):

with open(file_path, ‘r’) as file:

existing_ids = [int(line.strip()) for line in file]

if user_id not in existing_ids:

with open(file_path, ‘a’) as file:

file.write(str(user_id) + ‘n’)

chan_ids = read_channel_ids(‘channels.txt’)

def check_channels_verified(user_id):

i = 0

all_channels_verified = True

member = bot.get_chat_member(chat_id=chan_ids[i], user_id=user_id)

statuses = (‘creator’, ‘administrator’, ‘member’)

if member.status not in statuses:

all_channels_verified = False

break

i += 1

return all_channels_verified

def send_verification_message(chat_id, all_channels_verified):

markup = types.InlineKeyboardMarkup()

btn1 = types.InlineKeyboardButton(«Готово», callback_data=’good’)

if all_channels_verified:

bot.send_message(chat_id, ‘Ты молодец!’) # можно заменить на свой текст

save_user_id(chat_id, ‘users.txt’) # Сохранение идентификатора пользователя

else:

bot.send_message(chat_id, ‘Ты не молодец!’) # можно заменить на свой текст

markup.add(btn1)

def handle_text(message):

all_channels_verified = check_channels_verified(message.from_user.id)

send_verification_message(message.chat.id, all_channels_verified)

def handle_callback(call):

all_channels_verified = check_channels_verified(call.from_user.id)

send_verification_message(call.message.chat.id, all_channels_verified)

bot.polling()

6. Добавить бота в администраторы продвигаемых каналов.

7. Добавить ID продвигаемых каналов в файл channels.txt. Каждый канал — с новой строки.

8. Создать файл users.txt.

9. Загрузить файлы channels.txt и users.txt в корень хостинга.

10. Запустить бот и проверить функционал.

Фразы бота представлены для общего ознакомления. Рекомендуем заменить их на свои.

Демонстрация работы бота

Пишем боту сообщение. Так как мы не подписаны — он выдает «Ты не молодец» и призывает подписаться на каналы

Подпишемся на два канала из трех. Пишем снова. Бот все еще не считает нас «молодцом». В файле users.txt новых записей нет — так как условие конкурса не выполнено, а значит, мы еще не являемся участником.

Подписываемся на все каналы. Пишем боту еще раз. Бот выдает сообщение «Ты молодец!» и добавляет нас в список участников конкурса

Исходный код Telegram-бота для проведения розыгрышей

Подводя итоги

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

Источник: trafficcardinal.com

Рейтинг
( Пока оценок нет )
Загрузка ...