ааааааа-бааааNodeJS.2. Отправить музыку, фото.
/audio
:bot.command("audio", (ctx) => {
return ctx.replyWithAudio({ source: "./song.mp3" });
});
Диалог с ботом должен быть похожим на этот:А теперь давайте научим бот команде, по которой он будет отправлять случайное фото какого-нибудь милого животного. Для этого нужно сперва запастись парой или больше фото. Но есть способ лучше. Можно воспользоваться списком доступных апи , которые могут выдать некое фото. Возьмём для примера https://aws.random.cat/meow .
Приступим к написанию команды:
bot.command("photo", async (ctx) => {
const response = await fetch("https://aws.random.cat/meow");
const data = await response.json();
return ctx.replyWithPhoto(data.file);
});
ббббббббббжзббб.npm i node-fetch -S
.로봇.jsжгггааааааааааааааrequire("dotenv").config();
const fetch = require("node-fetch");
const { Telegraf } = require("telegraf");
Напомню: первая строка делает доступным обращение к файлу .환경(환경, 환경);마르마르마르, 마르마르마르, 마르마르마르텔레비전 방송.Бцжзззззззбзббзббз107.js,ааазжзззззззззззззззз.스크립트, 스크립트, 각본, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각,개발 로봇:
"scripts": {
"dev-bot": "node edu.js"
},
aaa, aa, aa, aa, aa, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,Итак, всё у нас работает, можно закончить на этом, но ... выше вы видели список многих апи, которые возвращают фото. Хотелось бы сделать так, что бы бот выдавал фото по какому-то признаку или скачивал по одному из каждого апи и выдавал это альбомом.
Рассмотрим эти возможности по-порядку.
Скачивание фото по признаку
이달의 연구 중 한 달의 연구 프로젝트가 이달의 연구 프로젝트에서 진행됐다. 이달의 연구 프로젝트에서 한 달의 연구 프로젝트가 이달의 연구 프로젝트에서 진행됐다. 이달의 연구 프로젝트에서 연구 프로젝트가 이달의 연구 프로젝트가 이달의 연구 프로젝트에서 진행됐고, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트에서, 이달의 연구 프로젝트가 이달의 연구 프로젝트가 이달의 연구 프로젝트, 이달의 연구 프로젝트가 이달의 연구 프로젝트, 이달의 연구 프로젝트가 이달의 연구 프로젝트, 이달의 연구 프로젝트가 이달의 연구 프로젝트, 이달의 연구 프로젝트가 이달의 연구 프로젝트, 이달예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예 예
Команда для бота - это, в принципе, текст сообщения, которое начинается с символа/. Поэтому разбор введённой строки может быть таким:
const whatAnimal = ctx.message.text.split(" ")[1] || "";
Здесь мы получаем часть строки, которая начинается после первого пробела. И да, такой подход имеет право быть, но я предложу способ лучше. 텔레비전 방송국.Например- параметры команды.Вот сейчас мы и напишем такой мидлвар:
const regex = /^\/([^@\s]+)@?(?:(\S+)|)\s?([\s\S]+)?$/i;
/**
* Мидлвар для разбора текста и команд в групповом чате
*/
module.exports = commandParts = async (ctx, next) => {
// В переменную text запишется текст сообщения для бота
const {
message: { text = "" },
} = ctx;
// Разобьём это сообщение на части
const parts = regex.exec(text);
// Если, к примеру, одно слово, то нечего разбивать
if (!parts) return next();
// Сформируем объект command, который присоеденим к ctx.state
const command = {
text,
command: parts[1],
bot: parts[2],
args: parts[3],
get splitArgs() {
return !parts[3] ? [] : parts[3].split(/\s+/).filter((arg) => arg.length);
},
};
ctx.state.command = command;
return next();
};
Саааааааааааааlib/commandParts.로봇.js:require("dotenv").config();
const fetch = require("node-fetch");
const { Telegraf } = require("telegraf");
const commandParts = require("../lib/commandParts");
// Создать бота с полученным ключом
const bot = new Telegraf(process.env.TELEGRAM_TOKEN_EDU);
// Подключить мидлвар
bot.use(commandParts);
....
Команда для бота будет выглядеть по-другому:bot.command("photo", async (ctx) => {
const chatId = ctx.message.chat.id;
// Получение аргументов
const { args = "" } = ctx.state.command;
// Возможно стоит проверить: верные аргументы пришли или нет
const whatAnimal = args;
// Пользователь, не скучай, я начал работу
ctx.telegram.sendMessage(chatId, "Ищу фото ...");
// Запрос урла картинки
const url = await randomAnimal(whatAnimal);
// Предусмотрительно защититься от null, который может внезапно прийти из апи (увы, да)
if (!url) {
return ctx.reply("Поиск фото не удался");
}
// А это что- gif, что ли пришёл, да?
const extension = url.split(".").pop();
if (extension.toLowerCase() === "gif") {
// Если gif, значит оформить анимешку
return telegram.sendAnimation(chatId, url);
}
return ctx.telegram.sendPhoto(chatId, url);
});
무작위 동물, 동물 사진.Вот его листинг:const fetch = require("node-fetch");
/**
* Случайное фото котофея
*/
const theCatApi = async () => {
const response = await fetch("https://api.thecatapi.com/v1/images/search");
const data = await response.json();
return data.url;
};
/**
* Ещё одно фото котёнка
*/
const randomCat = async () => {
const response = await fetch("https://aws.random.cat/meow");
const data = await response.json();
return data.file;
};
/**
* Собачка
*/
const dogCeo = async () => {
const response = await fetch("https://dog.ceo/api/breeds/image/random");
const data = await response.json();
return data.message;
};
/**
* Собачка 2
*/
const woof = async () => {
const response = await fetch("https://random.dog/woof.json");
const data = await response.json();
return data.url;
};
/**
* Лисичка
*
*/
const randomFox = async () => {
const response = await fetch("https://randomfox.ca/floof/");
const data = await response.json();
return data.image;
};
/**
* Получить случайное фото
* @param {'cat' | 'dog | 'fox'} animal
*/
exports.randomAnimal = async (animal = "") => {
const listApi = [];
if (!animal || animal[0] === "@") {
listApi.push(theCatApi);
listApi.push(randomCat);
listApi.push(dogCeo);
listApi.push(woof);
listApi.push(randomFox);
}
const checkWord = animal.toLowerCase();
if (checkWord === "cat") {
listApi.push(theCatApi);
listApi.push(randomCat);
}
if (checkWord === "dog") {
listApi.push(dogCeo);
listApi.push(woof);
}
if (checkWord === "fox") {
listApi.push(randomFox);
}
if (listApi.length === 0) {
return null;
}
return await listApi[Math.floor(Math.random() * listApi.length)]();
};
О чём эти функции: Если параметр команды не пустой, то обращаемся к случайному апи, сгруппированным по параметру. Иначе- выбирается случайный апи. После вызова возвращается урл картинки.зззззззззззззззззазз.jsааааааа
require("dotenv").config();
const { Telegraf } = require("telegraf");
const commandParts = require("./lib/commandParts");
const { randomAnimal } = require("./lib/animalPhoto");
// Создать бота с полученным ключом
const bot = new Telegraf(process.env.TELEGRAM_TOKEN_EDU);
// Подключить мидлвар
bot.use(commandParts);
// Обработчик начала диалога с ботом
bot.start((ctx) =>
ctx.reply(
`Приветствую, ${
ctx.from.first_name ? ctx.from.first_name : "хороший человек"
}! Набери /help и увидишь, что я могу.`
)
);
// Обработчик команды /help
bot.help((ctx) => ctx.reply("Справка в процессе"));
// Обработчик команды /whoami
bot.command("whoami", (ctx) => {
const { id, username, first_name, last_name } = ctx.from;
return ctx.replyWithMarkdown(`Кто ты в телеграмме:
*id* : ${id}
*username* : ${username}
*Имя* : ${first_name}
*Фамилия* : ${last_name}
*chatId* : ${ctx.chat.id}`);
});
bot.command("photo", async (ctx) => {
const chatId = ctx.message.chat.id;
// Получение аргументов
const { args = "" } = ctx.state.command;
// Возможно стоит проверить: верные аргументы пришли или нет.
// Но это Вам на домашнее задание ;-)
const whatAnimal = args;
// Пользователь, не скучай, я начал работу
ctx.telegram.sendMessage(chatId, "Ищу фото ...");
// Запрос урла картинки
const url = await randomAnimal(whatAnimal);
// Предусмотрительно защититься от null, который может внезапно прийти из апи (увы, да)
if (!url) {
return ctx.reply("Поиск фото не удался");
}
// А это что- gif, что ли пришёл, да?
const extension = url.split(".").pop();
if (extension.toLowerCase() === "gif") {
// Если gif, значит оформить анимешку
return telegram.sendAnimation(chatId, url);
}
return ctx.telegram.sendPhoto(chatId, url);
});
// Обработчик простого текста
bot.on("text", (ctx) => {
return ctx.reply(ctx.message.text);
});
// Запуск бота
bot.launch();
Работа бота будет такой:В следующий раз я расскажу, как выдавать фото-альбомы.
Reference
이 문제에 관하여(ааааааа-бааааNodeJS.2. Отправить музыку, фото.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/slkarol/nodejs-2-1f56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)