Reddit nodejs

Để có thể nhận bản cập nhật từ Telegram, bạn cần có mã thông báo. Tất cả các bản cập nhật và tương tác với bot được lưu trữ trong Telegram. Và bạn có thể nhận chúng bằng cách gửi yêu cầu đến URL này với mã thông báo đó

https://api.telegram.org/bot/METHOD_NAME

Bot API là một giao diện dựa trên HTTP được tạo cho các nhà phát triển quan tâm đến việc xây dựng bot cho Telegram

Start

Trước hết, hãy tiếp tục và tạo bot với BotFather– chính là bot. Bây giờ bạn đã có mã thông báo và có thể nhận được các bản cập nhật or từ Telegram. Please get an number of information from Telegram to be ensure bot active

Replace URL at on token and a method from API Bot of Telegram. Please use getMe method

https://api.telegram.org/bot/getMe
// --> {"ok":true,"result":{"id":437852999,"is_bot":true,"first_name":"Reddit Bot","username":"SimpleReddit_Bot"}}

Làm tốt lắm. Nhưng làm thế nào để chúng ta làm điều này trong NodeJS? . Mỗi khi cần cập nhật, sẽ gửi yêu cầu đến URL đó bằng phương thức mong muốn

Nhưng toàn bộ quá trình thực hiện điều này sẽ rất khó khăn, vì vậy có những khuôn khổ hữu ích cho công việc này. Họ xử lý mọi thứ và tập trung vào những điều quan trọng. Có một số framework tốt có sẵn cho NodeJS, theo hướng dẫn này, chúng ta sẽ sử dụng Telegraf

Bắt đầu code với NodeJS

Khởi tạo dự án và cài đặt Telegraf

npm init
npm install telegraf --save

Bây giờ hãy thêm nó vào tập lệnh và tạo một bot đơn giản

const Telegraf = require('telegraf');
const app = new Telegraf(YOUR_TOKEN_HERE);
app.hears('hi', ctx => {
  return ctx.reply('Hey!');
});
app.startPolling();

Chuyện gì vậy? . Chúng ta có thể sử dụng phương pháp này để trả lời tin nhắn của người dùng

Reddit nodejs

bot Reddit

Please get a example. Chúng ta sẽ gửi bài đăng đầu tiên của subreddit mà người dùng yêu cầu. Cài đặt thư viện axios để đơn giản hóa việc gửi yêu cầu GET và lấy dữ liệu từ Reddit

npm install axios --save
_______6
Reddit nodejs

Khi người dùng gửi tên subreddit, chúng tôi sẽ lấy bài đăng trên cùng của subreddit đó và gửi liên kết của nó cho họ. Đơn giản phải không?

Lưu trạng thái

Hãy tưởng tượng người dùng muốn các tùy chọn khác nhau như hàng đầu, hấp dẫn và mới. Chúng ta cần lưu trữ lệnh gần nhất mà họ đã sử dụng để có thể phản hồi chính xác. Lưu ý rằng chúng ta sử dụng phương thức lệnh thay vì trên

You could make the command on bot Telegram. Các lệnh bắt đầu bằng '/' và có thể nhấp được. To add command to your bot, please message for BotFather

let state = {};
app.command('top', ctx => {
  const userId = ctx.message.from.id;
  // if user id does not exist create one
  if (!state[userId]) state[userId] = { id: userId };
  // save/update user last command
  state[userId].command = 'top';
  return ctx.replyWithMarkdown(`Enter a subreddit name to get *top* posts.`);
});
app.command('hot', ctx => {
  const userId = ctx.message.from.id;
  if (!state[userId]) state[userId] = { id: userId };
  state[userId].command = 'hot';
  return ctx.replyWithMarkdown('Enter a subreddit name to get *hot* posts.');
});

Bây giờ có thể gửi bài phù hợp dựa trên bộ lọc. Trong phản hồi văn bản như sau

const userId = ctx.message.from.id;
// check if state and command exists and set defaults
const type = !state[userId]
  ? 'top'
  : state[userId].command ? state[userId].command : 'top';
axios
  .get(`https://reddit.com/r/${subreddit}/${type}.json?limit=10`)
  .then(res => [
    // do stuff
  ]);
Reddit nodejs

Nút nội tuyến

Bot Telegram có các nút tương tác được gọi là InlineKeyboardMarkup. Chúng ta sẽ thêm một nút tiếp theo để người dùng có thể nhận được các bài đăng tiếp theo trong danh mục đó

Chúng ta cần trích xuất các phương pháp cụ thể có thể chọn các nút từ Telegraf để làm việc với chúng

const { Markup } = require('telegraf');

Đầu tiên, hãy thêm số lượng bài đăng hiện tại vào trạng thái. Mỗi khi người dùng yêu cầu một subreddit, họ cần đặt chỉ mục thành 0. Trong texti method method

https://api.telegram.org/bot/getMe
// --> {"ok":true,"result":{"id":437852999,"is_bot":true,"first_name":"Reddit Bot","username":"SimpleReddit_Bot"}}
0

Thay vì gửi văn bản thuần túy, chúng tôi gửi nó bằng một nút nội tuyến trong axios phản hồi

https://api.telegram.org/bot/getMe
// --> {"ok":true,"result":{"id":437852999,"is_bot":true,"first_name":"Reddit Bot","username":"SimpleReddit_Bot"}}
1

Chúng ta có thể xử lý lệnh gọi lại với phương thức bật, nhưng lần này, phương thức cập nhật là callback_query

https://api.telegram.org/bot/getMe
// --> {"ok":true,"result":{"id":437852999,"is_bot":true,"first_name":"Reddit Bot","username":"SimpleReddit_Bot"}}
2
Reddit nodejs

Kết luận

Như bạn có thể thấy, chúng ta đã tạo bot Telegram đơn giản trong vài phút. Tạo bot trong Telegram dễ dàng, nhưng không dừng lại ở đây. Có rất nhiều thứ khác mà bạn có thể làm với họ — chẳng hạn như gửi ảnh, video, tài liệu, v.v. v

Hãy tưởng tượng tất cả những điều bạn có thể làm với API của Telegram sẽ trở nên tốt hơn với mỗi bản cập nhật