guilded.ts
Version:
A powerful NPM module that allows you to easily interact with the Guilded API.
95 lines • 3.72 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ListItemManager = void 0;
const BaseManager_1 = require("./BaseManager");
const ListItem_1 = require("../structures/listItem/ListItem");
const collection_1 = require("@discordjs/collection");
/**
* The manager of items that belong to a list channel.
* @example new ListItemManager(channel);
*/
class ListItemManager extends BaseManager_1.BaseManager {
channel;
/** @param channel The list channel the items belong to. */
constructor(channel) {
super(channel.client, channel.client.options.maxListItemCache);
this.channel = channel;
}
fetch(arg1, arg2) {
if (typeof arg1 === 'string' || arg1 instanceof ListItem_1.ListItem)
return this.fetchSingle(arg1, arg2);
return this.fetchMany(arg1);
}
/** @ignore */
async fetchSingle(listItem, options) {
listItem = listItem instanceof ListItem_1.ListItem ? listItem.id : listItem;
const cached = this.cache.get(listItem);
if (cached && !options?.force)
return cached;
const raw = await this.client.api.listItems.fetch(this.channel.id, listItem);
return new ListItem_1.ListItem(this.channel, raw, options?.cache);
}
/** @ignore */
async fetchMany(options) {
const raw = await this.client.api.listItems.fetch(this.channel.id);
const items = new collection_1.Collection();
for (const data of raw) {
const item = new ListItem_1.ListItem(this.channel, data, options?.cache);
items.set(item.id, item);
}
return items;
}
/**
* Add a item to the list channel.
* @param message The message of the item.
* @param note The note of the item.
* @returns The added item.
* @example items.add('Hello World!');
*/
async add(message, note) {
const raw = await this.client.api.listItems.create(this.channel.id, message, note);
return new ListItem_1.ListItem(this.channel, raw);
}
/**
* Edit a item in the list channel.
* @param listItem The item to edit.
* @param message The message of the item.
* @param note The note of the item.
* @returns The edited item.
* @example items.edit(item, 'Hello World!');
*/
async edit(listItem, message, note) {
listItem = listItem instanceof ListItem_1.ListItem ? listItem.id : listItem;
const raw = await this.client.api.listItems.edit(this.channel.id, listItem, message, note);
return new ListItem_1.ListItem(this.channel, raw);
}
/**
* Remove a item in the list channel.
* @param listItem The item to remove.
* @example items.remove(item);
*/
remove(listItem) {
listItem = listItem instanceof ListItem_1.ListItem ? listItem.id : listItem;
return this.client.api.listItems.delete(this.channel.id, listItem);
}
/**
* Complete a item in the list channel.
* @param listItem The item to complete.
* @example items.complete(item);
*/
complete(listItem) {
listItem = listItem instanceof ListItem_1.ListItem ? listItem.id : listItem;
return this.client.api.listItems.complete(this.channel.id, listItem);
}
/**
* Uncomplete a item in the list channel.
* @param listItem The item to uncomplete.
* @example items.uncomplete(item);
*/
uncomplete(listItem) {
listItem = listItem instanceof ListItem_1.ListItem ? listItem.id : listItem;
return this.client.api.listItems.uncomplete(this.channel.id, listItem);
}
}
exports.ListItemManager = ListItemManager;
//# sourceMappingURL=ListItemManager.js.map