Ответ telegram-бота на определенные слова
Хочу создать простого telegram-бота, установил библиотеку pyTelegramBotAPI. Есть пример бота, который отвечает на команды (со слешем) и повторяет всё, что ему пишут (без слеша). Сам разобраться не смог:
Как написать функцию, чтобы бот(Б) отвечал тебе на определенные слова и чтобы команда от юзера (Ю) отправлялась без слеша, например:
А на остальные, «не забитые» слова, отвечал: «Я не понимаю, о чем ты. может пояснишь?» Спасибо.
Как создать собственный сценарий для чат-бота
Каждый сценарий содержит шаги, на которых находится пользователь. Один шаг состоит из двух блоков:
1. Блок триггера (реакция) — блок, в котором мы указываем, на какое действие реагировать чат-боту. Триггером могут быть ключевые слова (например цена, как добраться, сколько стоит), отметка в Stories, отправка публикации и многое другое.
2. Блок ответа — блок, в котором мы указываем, что должен сделать бот, если сработает триггер (первый блок). Ответом может быть отправка сообщения, фото и т.д.

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

2. Когда триггеры работают независимо друг от друга и чат-бот отправляет только по одному сообщению на каждый вопрос. Например:
Клиент пишет слово «цена»
Чат-бот отправляет цену на товар
Клиент пишет слово «адрес»
Чат-бот отправляет адрес своего магазина
Для реализации такого режима, нужно создавать новый сценарий для каждого триггера.

Список триггеров (реакций)
Нажмет на кнопку. Бот будет реагировать если клиент нажмет на кнопку, которая была создана в предыдущем шаге.
Напишет любое сообщение. Бот будет реагировать на любое сообщение.
Напишет ключевые слова. Бот будет реагировать, если в сообщении от пользователя будут слова, которые вы укажете. Поиск слов будет происходить независимо от их регистра.
Напишет команду. Бот будет реагировать только на те сообщения, которые полностью совпадают со словами, которые вы укажете. Например, если вы укажете команду «цена», тогда бот будет реагировать только на сообщения с текстом «цена», а такие сообщения, как «какая цена», будут пропущены. Поиск слов будет происходить независимо от их регистра.
Пришлет фото/видео. Бот будет реагировать, если пользователь отправит вам фото или видео
Отправит публикацию. Бот будет реагировать, если пользователь отправит вам Инстаграм публикацию
Отметит вас в Stories. Бот будет реагировать, если пользователь отметит вас в Stories
Пришлет аудиосообщение. Бот будет реагировать, если пользователь отправит вам аудиосообщение
Ответит на вашу Stories. Бот будет реагировать, если пользователь ответит на вашу Stories
Пришлет ссылку в сообщении. Бот будет реагировать, если пользователь отправит вам текстовое сообщение в котором будет ссылка на любой сайт
Если клиент не отвечает. Бот запустит цепочку, если клиент не отвечает на сообщение бота в течении n минут. Время вы указываете сами.
Пришлет данные для проверки. Если вам необходимо, чтобы пользователь ввёл данные, которые должны быть в строгом формате, например телефон, email, дата, время, вы можете использовать этот параметр. Если пользователь попытается ввести некорректные данные, ему будет отправлено сообщение с ошибкой. Если пользователь введет неверные данные, чат-бот отправит ему сообщение с ошибкой, текст ошибки вы можете указать сами. Пока пользователь не введёт правильные данные, он не будет перемещён на следующий шаг.
Список ответов бота
Отправить сообщение. Бот отправит клиенту текстовое сообщение
Отправить фото. Бот отправит клиенту изображение. Изображение должно быть от 600px до 1080px по ширине и размером до 1мб
Изменить группу клиента. Бот изменит группу клиента в разделе «CRM»
Сделать запись в переменную. Бот сделает запись в переменную клиента. Значением может быть сообщение, которое отправил клиент, а также свой произвольный текст.
Переместить клиента. Бот переместит клиента на определенный шаг сценария.
Отправить Webhook. Бот отправит GET/POST запрос на ваш URL.
Выполнить запрос к API. Бот отправит GET/POST запрос на ваш URL, получит ответ и сохранит данные из ответа в переменную.
Отключить автоответ. Бот перестанет отвечать этому клиенту в автоматическом режиме.
Выполнить условие. Бот выполнит условие, которое вы укажите, и запустит нужную цепочку, в зависимости от того, выполнится условие или нет.
Приоритеты
Если у вас указано несколько триггеров, на которые должен реагировать бот, сработает только один, более приоритетный.
Приоритеты триггеров:
- Нажмет на кнопку
- Пришлет данные для проверки
- Пришлет фото/видео
- Аудиосообщение
- Напишет команду
- Пришлет ссылку в сообщении
- Напишет ключевые слова
- Отправит пуубликацию
- Ответит на вашу Stories
- Отметит вас в Stories
- Напишет любое сообщение
Порядок выполнения действий в блоке ответа:
- Запись в переменную
- Изменение группы клиента
- Отправка запроса к API
- Отправка фото
- Отправка текстового сообщения
- Перемещение клиента
- Отправка Вебхука
- Отключение автоответа
- Выполнение условия
Как создать новый сценарий
Чат-бот может иметь неограниченное количество сценариев. Если у вас уже есть сценарии, то для создания нового сценария, нажмите на кнопку вверху справа «Добавить сценарий».

Если ранее вы ещё не создавали сценарий, тогда перейдите в раздел «Чат-бот» и нажмите «Добавить сценарий». 
Как сделать, чтобы бот реагировал на определенное слово только когда в сообщении присутствует картинка?
Уже третий день с этим ковыряюсь, не могу найти никакой информации
В сообщении боту должен присутствовать определенный текст и картинка, только в этом случае он должен реагировать
Если в сообщении присутствует только этот определенный текст или только картинка, то реагировать он не должен
Если использовать:
То он не реагирует вовсе
- Вопрос задан более года назад
- 825 просмотров
- Вконтакте
надо сравнивать не весь текст со «словом», а искать вхождение «слова» в текст сообщения.
if «слово» in message.text:
Возможно даже стоит обращаться не к полю text, а к полю caption. Экспериментируйте.
- Вконтакте
UPD: действительно, нужно обращаться к caption, спасибо большое!
duuuuuuuden, небольшой совет.
ищите слово приводя поле caption в нижний регистр.
if «test» in message.caption.lower():
так вы покроете варианты, когда в сообщении будут использованы заглавные буквы, например «Test» «TEST»
Пишем себе подчиненного(пока только в Minecraft) (Часть 1)
Для Minecraft существует несколько API для создания ботов, я расскажу о самой популярной из них, mineflayer.
Я, к слову, далеко не специалист в js так что могу допускать кучу ошибок. В следующей части обещаю рассмотреть интересные плагины и более сложные методы
Mineflayer — высокоуровневое API написанное на Node. js.
Разработчики постоянно его обновляют, тем не менее API всё ещё не поддерживает версию 1.19, посему «подчиненного» мы будем писать на версии 1.18.2.
У mineflayer есть собственный сайт Там указан подробный список фич и модулей апи, видео-туториалы, примеры и список сторонних плагинов дополняющих оригинальный API.
Это апи мы и будем использовать для создания бота.
Скачиваем Node. js с официального сайта и прописывайте npm install mineflayer в консоль дабы установить API
Далее заходим в Minecraft, создаем новый мир и открываем его для локальной сети. Получаем порт
Теперь нам нужно создать. js файл где мы собственно и будем писать нашего бота. Для меня это dtf. js
Для начала стоит импортировать библиотеку и создать бота. У бота есть множество параметров. Основные — host, port, username. host отвечает за IP на которое бот будет заходить(в нашем случае — «localhost« или-же »127.0.0.1» поскольку машина должна подключаться к миру в локальной сети). port отвечает за порт на который будет заходить бот, нужно указать тот что вы получили при открытии мира для сети. username отвечает за никнейм бота на сервере. В моем случае это DTFBot, вы можете указать любой.
Уже на данном этапе вы можете запустить бота при помощи node ваш_файл. js, и он даже зайдет в мир! Правда не будет ничего делать.
Добавляем первые функции
Давайте научим нашего бота говорить хоть что-то. Например «Я родился» при появлении в мире
Реакция на сообщения
Научим бота реагировать на слова начальника, а то какой-же тогда будет подчиненный?
Учим бота защищать начальника
Как каждый самурай должен быть готов отдать жизнь за своего господина, так каждый подчиненный должен быть готов биться за своего начальника. Поскольку у mineflayer довольно гибкая система взаимодействия с энтити мы можем легко это реализовать!
Защищать нас бот будет от глупых крестьян не имеющих даже пары миллионов наличными.
Теперь после появления в мире каждую секунду бот будет пытаться атаковать ближайшего крестьянина вооружившись мечём если таковой есть в инвентаре. Сначала бот ищет в инвентаре Item в названии которого есть «меч», а затем берет его в руку при помощи bot. equip. Вооружившись мечем бот ищет ближайшего крестьянина по фильтру villagerFilter и атакует его если видит.
Учим подчиненного ходить за начальником
А если начальник решит пройтись? Что бот будет делать? Да ничего, просто стоять на месте. Исправляем!
Тут нам понадобится плагин mineflayer-pathfinder что добавляет возможность пазфайндинга в бота
Устанавливаем его при помощи npm install mineflayer-pathfinder и начинаем работу.
Импортируем пазфайндер и основные его цели при помощи
и загружаем его после объявления бота при помощи
Так-же нам понадобится minecraft-data
Теперь нам остается только добавить комманды «За мной«, «Ко мне» и »Остановись».
После получения комманды бот получает игрока написавшего комманду по его никнейму и создает Goal на его основе. В данном случае это GoalFollow которая дает боту комманду следовать за определенным энтити и GoalNear дающая боту комманду подойти недалеко от указанных координат. Что-бы остановиться мы просто обнуляем Goal
Наблюдаем за работником
Никакой свободы сотрудникам, будем за ними следить!
Для этого нам понадобится prismarine-viewer
По привычной схеме устанавливаем prismarine-viewer и импортируем его в бота
Затем добавляем запуск вьювера на порте 3000 в код
Готово! Веб сервер запускается и достаточно перейти в браузере на localhost:3000 как вам откроется вид от первого лица бота
А если начальник покушать захочет?
У майнфлеера есть и довольно специфичные методы, давайте их используем!
Простой код что заставляет бота взять в руки удочку и воспользоваться ею. Как только бот увидит что рыба клюет он её подцепит.
Для mineflayer есть множество интересных плагинов. Лично я рекомендую
Они наиболее хорошо расширяют возможности API
Обязательно посмотрите видео-туториалы по mineflayer
Удачи вам в создании эффективных сотрудников
Там где много ифов имхо симпатичнее будет смотреться свитч кейс
Свитчкейс ещё и быстрее работают (если компилятор не додумался ифы свернуть в него)
И function declaration это уже моветон имхо опять же
Что то на погромистском, но интересно, а на добычу руды его можно припахать?
Конечно можно, mineflayer-collectblock позволяет собирать блоки разнообразные. Можно даже сделать баритон на "радио управлении"
а можно его на сервера с регистрацией засунуть и потом на СкайПвп переместить ? или чтоб он пати принимал
Конечно можно. У меня даже есть бот который капчу умеет решать
Вы Илон Маск? Можете рассказать? видел в году 2019 человека который привязывал ботов на игроков и они следовали за ними
Про капчу есть вопрос на гитхабе.(https://github.com/PrismarineJS/mineflayer/issues/1186). А реализовать привязку бота можно при помощи GoalFollow в mineflayer-pathfinder и bot.players[username]
А где создавать этот файл (dtf.js)? Пишу команду node dtf.js , чтобы бот зашёл на сервер и пишет вот такую ошибку.
В той директории которая открыта в IDE
А можно сделать так, чтобы бот постоянно стоял на месте и ломал блоки? У него постоянна должно быть зажато ЛКМ? Такое возможно? И можно все это дело залить на хостинг? Чтобы бот работал даже с выключенным пк.
Мне кажется, но вы слишком плохо изучаете программирование
Да, буквально месяц назад я и этого не понимал) Сейчас уже лучше
Про хостинг — Можно ! Правда нужен сервер , для этого два выбора — Облачный хостинг с оплатой или же использовать какое нибудь устройство в качестве сервера , но тогда устройство должно постоянно работать ( Для примера можно взять сервер на основу Raspberry Pi )
Raspberry Pi это — гаджет линейки ягодных , работает как компьютер , я его бы даже назвал микро-компьютером потому что у него слабое железо и ютуб на нем запускается с трудом , однако он компактный и есть модели которые втыкаются в розетку и работают от розетки при этом не занимая много места , из за его слабости покупать его в качестве компьютера — плохая идея , однако его можно использовать как сервер что нам и надо
Здравствуйте, посмотрите мой код. Получится порыбачить?
async function fishing() <
const fishing_rod = bot.findInstrument(<
matching: instrument => bot.isArod(instrument)
>)
if (rod) <
try <
await bot.throw(); <
bot.chat(‘Закинул удочку’)
>
> catch (err) <
bot.chat(`Не получилось: $
>
async function fish(bite) <
if (bite) <
bot.catchFish;
>
>
>
здрасвуйте начальника, моя подчиненная не приходить на сервер вот что писать. Как подчиненная заставиць?
Сервер есть Тлаунцира это
Точно открыл для сети и порт локалхоста правильно указал?
Да я все правильно указал
Пробовал уже раз так 7 не меньше, а также с разными лаунчерами и версиями
Примерно к 8 вечера более подробно рассмотрю в чем ошибка
Майнфлеер к слову досихпор не работает на 1.19. А ланучеры можно было и не пробовать, они все запускают один майнкрафт. Скинешь как ты объявил бота у себя в коде?