Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/inkohx/discord.js-reaction-controller
Discord.js Reaction Controller
https://github.com/inkohx/discord.js-reaction-controller
discord-bot discordjs typescript
Last synced: 2 days ago
JSON representation
Discord.js Reaction Controller
- Host: GitHub
- URL: https://github.com/inkohx/discord.js-reaction-controller
- Owner: InkoHX
- License: mit
- Archived: true
- Created: 2020-05-04T12:04:06.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-09-14T16:08:56.000Z (about 2 years ago)
- Last Synced: 2024-09-24T23:54:56.651Z (2 days ago)
- Topics: discord-bot, discordjs, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/discord.js-reaction-controller
- Size: 165 KB
- Stars: 3
- Watchers: 3
- Forks: 2
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# discord.js-reaction-controller
[![Scrapbox](https://img.shields.io/badge/Scrapbox-docs-green)](https://scrapbox.io/discordjs-japan/リアクションを使って簡単にページネーションを作成するDiscord.js専用のパッケージ)
![Discord.js Reaction Controller](https://i.imgur.com/JOJJZF6.gif)
## Install
### Requirements
- Discord.js v12.2.0 or later
### NPM
```bash
npm install discord.js-reaction-controller
```### Yarn
```bash
yarn add discord.js-reaction-controller
```## Example of usage
```js
const Discord = require('discord.js')
const { ReactionController } = require('discord.js-reaction-controller')const client = new Discord.Client()
client.on('message', message => {
if (message.content.startsWith('>pagination')) {
const controller = new ReactionController(client)controller
.addReactionHandler('🤔', (reaction) => {
reaction.message.channel.send('thinking')
.catch(console.error)
})controller.addPages([
new Discord.MessageEmbed().setImage('https://github.com/yyx990803.png'),
new Discord.MessageEmbed().setImage('https://github.com/egoist.png'),
new Discord.MessageEmbed().setImage('https://github.com/vercel.png'),
new Discord.MessageEmbed().setImage('https://github.com/Google.png'),
new Discord.MessageEmbed().setImage('https://github.com/Microsoft.png')
])controller.sendTo(message.channel, message.author)
.catch(console.error)
}
})client.login()
.catch(console.error)
```### Using Promise (Lazy Loading)
It is recommended to create a function that returns MessageEmbed with Promise and put it in the argument of addPages and addPage when there are many processes to access externally through the network.
That way, "discord.js-reaction-controller" will resolve the promises as needed and cache and display the MessageEmbed.
```js
const { Client, MessageEmbed } = require('discord.js')
const { ReactionController } = require('discord.js-reaction-controller')
const { getBasicInfo } = require('ytdl-core')const client = new Client()
const fetchYouTubeVideoInfo = videoUrl => async () => {
const { videoDetails } = await getBasicInfo(videoUrl)return new MessageEmbed()
.setColor('RED')
.setTitle(videoDetails.title)
.setURL(videoDetails.video_url)
.setImage(videoDetails.thumbnails[videoDetails.thumbnails.length - 1].url)
.setTimestamp(Date.parse(videoDetails.publishDate))
.setFooter('Uploaded on')
.setAuthor(videoDetails.author.name, videoDetails.author.thumbnails[0].url, videoDetails.author.channel_url)
}const videos = [
'https://youtu.be/sWbD5q769Ms',
'https://youtu.be/0-zJNiSvz8Q',
'https://youtu.be/1x2izJEN9p0',
'https://youtu.be/gNp4VNr44hg',
'https://youtu.be/Vi_asBY5UX8',
'https://youtu.be/plqoPcKQnyE',
'https://youtu.be/308I91ljCWg'
]client.on('message', message => {
if (message.content.startsWith('>pagination')) {
const controller = new ReactionController(client)controller
.addReactionHandler('🤔', (reaction) => {
reaction.message.channel.send('thinking')
.catch(console.error)
})controller.addPages(videos.map(url => fetchYouTubeVideoInfo(url)))
controller.sendTo(message.channel, message.author)
.catch(console.error)
}
})client.login()
```