Add response to no arg n?help and finish base pagination class

master
Kit Kasune 4 years ago
parent bfd2a168ff
commit ab34712dec
  1. 8
      commands/help.js
  2. 2
      commands/logs.js
  3. 40
      util/pagination.d.ts
  4. 102
      util/pagination.js
  5. 125
      util/ts/pagination.ts

@ -1,14 +1,16 @@
const Discord = require("discord.js");
const {Pagination} = require('../util/pagination');
module.exports = {
name: "help",
aliases: ["h", "commands", "cmds"],
help: 'you silly! What did you expect me to respond with?',
execute(message, msg, args, cmd, prefix, mention, client) {
async execute(message, msg, args, cmd, prefix, mention, client) {
if (!args.length) {
return message.channel.send("Heya! My help command is currently under construction since my devs are hard at work on my commands and they haven't released me to the full public yet! Consider yourself lucky...");
} else {
var command;
let command;
if (client.commands.has(args[0])) {command = client.commands.get(args[0]);}
else if (client.aliases.has(args[0])) {command = client.commands.get(client.aliases.get(args[0]));}
else {return message.reply("I don't have that command! Try using `" + prefix + "help` to get a list of my commands");}

@ -60,7 +60,7 @@ module.exports = {
tl.save();
if (!client.guildconfig.logs.has(message.guild.id)) {client.guildconfig.logs.set(message.guild.id, new Map());}
client.guildconfig.logs.get(message.guild.id).set(lt, ch.id);
return message.channel.send("Log settings updated!");
return message.channel.send("Log settings updated!")
}
if (['l', 'list'].includes(args[0].toLowerCase())) {

@ -1,33 +1,15 @@
import { MessageEmbed, Message, Client } from 'discord.js';
import { TextChannel, Message, MessageEmbed, Client } from 'discord.js';
export declare class Pagination {
title: string;
pages: Page[];
zeroPage: Page | MessageEmbed;
pageTemplate: MessageEmbed;
channel: TextChannel;
message: Message;
timeout: Number;
description: string;
activationMessage: Message;
pages: MessageEmbed[];
originalMessage: Message;
currentPage: number;
client: Client;
currentpos: number;
constructor(title: string, pages: Page[], zeroPage: Page | MessageEmbed, client: Client, message: Message, activationMessage: Message, timeout: number, description?: string, pageTemplate?: MessageEmbed);
addPage(page: Page): Pagination;
render(pos: number): Pagination;
nextPage(): Pagination;
prevPage(): Pagination;
destroy(delmsg?: boolean, fmsg?: Message): Pagination;
resetTimeout(newTimeout?: number): Pagination;
init(): Pagination;
constructor(channel: TextChannel, pages: MessageEmbed[], originalMessage: Message, client: Client, message?: Message);
setPage(page: number): Promise<Pagination>;
nextPage(): Promise<Pagination>;
prevPage(): Promise<Pagination>;
addPage(page: MessageEmbed): Pagination;
replacePage(index: number, page: MessageEmbed): Pagination;
}
export declare class Page {
items: PageItem[];
title: string;
description: string;
constructor(title: string, items: PageItem[], description?: string);
addItem(item: PageItem): Page;
}
interface PageItem {
title: string;
text: string;
}
export {};

@ -1,86 +1,60 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Page = exports.Pagination = void 0;
const discord_js_1 = require("discord.js");
exports.Pagination = void 0;
class Pagination {
constructor(title, pages, zeroPage, client, message, activationMessage, timeout, description, pageTemplate) {
this.currentpos = 0;
this.title = title;
constructor(channel, pages, originalMessage, client, message) {
this.channel = channel;
this.pages = pages;
this.zeroPage = zeroPage;
this.message = message;
this.timeout = timeout;
this.activationMessage = activationMessage;
this.originalMessage = message;
this.client = client;
this.description = description ? description : `Requested by ${activationMessage.guild ? activationMessage.member.displayName : activationMessage.author.username}.`;
this.pageTemplate = pageTemplate
? pageTemplate
: new discord_js_1.MessageEmbed()
.setDescription(this.description)
.addField('Navigation', `Click or tap the arrows below this message to navigate through the pages!\n\n*This menu will timeout in ${this.timeout}ms.`)
.setColor('c375f0')
.setFooter('Natsuki', this.client.user.avatarURL())
.setTimestamp();
}
;
addPage(page) {
this.pages.push(page);
return this;
this.currentPage = 0;
if (message) {
this.message = message;
}
}
;
render(pos) {
let page = this.pages[this.currentpos];
let pageEmbed = new discord_js_1.MessageEmbed()
.setTitle(`${this.title} -> ${page.title}`)
.setDescription(`${this.pageTemplate.description ? this.pageTemplate.description : this.description}\n\n${page.description}`)
.setColor(this.pageTemplate.hexColor ? this.pageTemplate.hexColor : 'c375f0')
.setFooter(this.pageTemplate.footer ? `${this.pageTemplate.footer.text} | Page ${this.currentpos + 1} of ${this.pages.length}` : `Natsuki | Page ${this.currentpos + 1} of ${this.pages.length}`)
.setTimestamp();
let item;
for (item of page.items) {
pageEmbed.addField(item.title, item.text);
async setPage(page) {
if (this.pages.length < page + 1) { }
if (!this.message) {
let tempm = await this.channel.send("One moment...")
.catch(() => { this.originalMessage.reply("There seemed to be a problem doing that..."); return this; });
if (tempm instanceof Pagination) {
return this;
}
else {
this.message = tempm;
}
}
if (this.pageTemplate.thumbnail) {
pageEmbed.setThumbnail(this.pageTemplate.thumbnail.url);
}
this.message.edit(pageEmbed);
await this.message.edit(this.pages[page]
.setFooter(`Natsuki | Page ${page + 1} of ${this.pages.length}`, this.client.user.avatarURL())
.setTimestamp());
this.currentPage = page;
return this;
}
;
nextPage() {
return this.render(this.currentpos < (this.pages.length - 1) ? this.currentpos + 1 : this.currentpos);
}
;
prevPage() {
return this.render(this.currentpos > 0 ? this.currentpos - 1 : this.currentpos);
}
;
destroy(delmsg, fmsg) {
async nextPage() {
await this.setPage(typeof this.currentPage === "number" ? this.currentPage + 1 == this.pages.length ? this.currentPage : this.currentPage + 1 : 0);
return this;
}
;
resetTimeout(newTimeout) {
async prevPage() {
await this.setPage(typeof this.currentPage === "number" ? this.currentPage === 0 ? 0 : this.currentPage - 1 : this.pages.length - 1);
return this;
}
;
init() {
addPage(page) {
this.pages.push(page);
return this;
}
;
}
exports.Pagination = Pagination;
class Page {
constructor(title, items, description) {
this.items = [];
this.title = title;
this.items = items;
this.description = description;
}
;
addItem(item) {
this.items.push(item);
replacePage(index, page) {
if (index < 0) {
throw new RangeError("replacePage() param 'index' must be a value greater than 0");
}
if (index > this.pages.length - 1) {
throw new RangeError("replacePage() param 'index' must be a value corresponding to an index that already exists in this instance's pages.");
}
this.pages[index] = page;
return this;
}
;
}
exports.Page = Page;
exports.Pagination = Pagination;

@ -1,119 +1,66 @@
import {MessageEmbed, Message, Client} from 'discord.js';
import wait = require('../../util/wait');
import {TextChannel, Message, MessageEmbed, Client} from 'discord.js';
export class Pagination {
title: string;
pages: Page[];
zeroPage: Page | MessageEmbed;
pageTemplate: MessageEmbed;
channel: TextChannel;
message: Message;
timeout: Number;
description: string;
activationMessage: Message;
pages: MessageEmbed[];
originalMessage: Message;
currentPage: number;
client: Client;
currentpos: number = 0;
constructor (title: string, pages: Page[], zeroPage: Page | MessageEmbed, client: Client, message: Message, activationMessage: Message, timeout: number, description?: string, pageTemplate?: MessageEmbed) {
this.title = title;
let tpages = [];
tpages.push(zeroPage);
let tpage: Page; for (tpage of pages) {tpages.push(tpage);}
this.pages = tpages;
this.zeroPage = zeroPage;
this.message = message;
this.timeout = timeout;
this.activationMessage = activationMessage;
constructor (channel: TextChannel, pages: MessageEmbed[], originalMessage: Message, client: Client, message?: Message) {
this.channel = channel;
this.pages = pages;
this.originalMessage = message;
this.client = client;
this.currentPage = 0;
this.description = description ? description : `Requested by ${activationMessage.guild ? activationMessage.member.displayName : activationMessage.author.username}.`;
this.pageTemplate = pageTemplate
? pageTemplate
: new MessageEmbed()
.setDescription(this.description)
.addField('Navigation', `Click or tap the arrows below this message to navigate through the pages!\n\n*This menu will timeout in ${this.timeout}ms.`)
.setColor('c375f0')
.setFooter('Natsuki', this.client.user.avatarURL())
.setTimestamp();
if (message) {this.message = message;}
};
public addPage(page: Page): Pagination {
this.pages.push(page);
return this;
};
public async setPage(page: number): Promise<Pagination> {
if (this.pages.length < page + 1) {}
public render(pos: number): Pagination {
let page = this.pages[this.currentpos];
let pageEmbed: MessageEmbed = new MessageEmbed()
.setTitle(`${this.title} -> ${page.title}`)
.setDescription(`${this.pageTemplate.description ? this.pageTemplate.description : this.description}\n\n${page.description}`)
.setColor(this.pageTemplate.hexColor ? this.pageTemplate.hexColor : 'c375f0')
.setFooter(this.pageTemplate.footer ? `${this.pageTemplate.footer.text} | Page ${this.currentpos + 1} of ${this.pages.length}` : `Natsuki | Page ${this.currentpos + 1} of ${this.pages.length}`)
.setTimestamp();
let item: PageItem; for (item of page.items) {pageEmbed.addField(item.title, item.text);}
if (this.pageTemplate.thumbnail) {pageEmbed.setThumbnail(this.pageTemplate.thumbnail.url);}
if (!this.message) {
let tempm = await this.channel.send("One moment...")
.catch(() => {this.originalMessage.reply("There seemed to be a problem doing that..."); return this;});
if (tempm instanceof Pagination) {return this;}
else {this.message = tempm;}
}
this.message.edit(pageEmbed);
await this.message.edit(this.pages[page]
.setFooter(`Natsuki | Page ${page + 1} of ${this.pages.length}`, this.client.user.avatarURL())
.setTimestamp()
);
this.currentPage = page;
return this;
};
public nextPage(): Pagination {
return this.render(this.currentpos < (this.pages.length - 1) ? this.currentpos + 1 : this.currentpos);
};
public prevPage(): Pagination {
return this.render(this.currentpos > 0 ? this.currentpos - 1 : this.currentpos);
};
public destroy(delmsg?: boolean, fmsg?: Message): Pagination {
public async nextPage(): Promise<Pagination> {
await this.setPage(typeof this.currentPage === "number" ? this.currentPage + 1 == this.pages.length ? this.currentPage : this.currentPage + 1 : 0);
return this;
};
public resetTimeout(newTimeout?: number): Pagination {
public async prevPage(): Promise<Pagination> {
await this.setPage(typeof this.currentPage === "number" ? this.currentPage === 0 ? 0 : this.currentPage - 1 : this.pages.length - 1);
return this;
};
public init(): Pagination {
public addPage(page: MessageEmbed): Pagination {
this.pages.push(page);
return this;
};
}
export class Page {
items: PageItem[] = [];
title: string;
description: string;
constructor(title: string, items: PageItem[], description?: string) {
this.title = title;
this.items = items;
this.description = description;
};
}
public replacePage(index: number, page: MessageEmbed): Pagination {
if (index < 0) {throw new RangeError("replacePage() param 'index' must be a value greater than 0");}
if (index > this.pages.length - 1) {throw new RangeError("replacePage() param 'index' must be a value corresponding to an index that already exists in this instance's pages.");}
public addItem(item: PageItem): Page {
this.items.push(item);
this.pages[index] = page;
return this;
};
}
interface PageItem {
title: string,
text: string
}
}
Loading…
Cancel
Save