@stoatx/client 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -674
- package/README.md +3 -3
- package/dist/index.cjs +170 -29
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +131 -18
- package/dist/index.d.ts +131 -18
- package/dist/index.js +170 -29
- package/dist/index.js.map +1 -0
- package/package.json +4 -8
package/dist/index.js
CHANGED
|
@@ -384,7 +384,7 @@ var GatewayManager = class {
|
|
|
384
384
|
if (payload.users) {
|
|
385
385
|
for (const rawUser of payload.users) {
|
|
386
386
|
this.client.users._add(rawUser);
|
|
387
|
-
if (rawUser.
|
|
387
|
+
if (rawUser.relationship === "User" && !this.client.user) {
|
|
388
388
|
this.client.user = new ClientUser(this.client, rawUser);
|
|
389
389
|
}
|
|
390
390
|
}
|
|
@@ -551,7 +551,8 @@ var GatewayManager = class {
|
|
|
551
551
|
}
|
|
552
552
|
reconnect() {
|
|
553
553
|
if (!this.token) {
|
|
554
|
-
|
|
554
|
+
this.client.emit("error", new Error("RECONNECT_FAILED: No token available."));
|
|
555
|
+
return;
|
|
555
556
|
}
|
|
556
557
|
let waitTime = Math.pow(2, this.reconnectAttempts) * 1e3;
|
|
557
558
|
const jitter = waitTime * 0.2 * Math.random();
|
|
@@ -827,11 +828,17 @@ import * as util2 from "util";
|
|
|
827
828
|
|
|
828
829
|
// src/managers/BaseManager.ts
|
|
829
830
|
var BaseManager = class {
|
|
831
|
+
cache;
|
|
832
|
+
client;
|
|
830
833
|
constructor(client, limit = Infinity) {
|
|
831
834
|
this.client = client;
|
|
832
835
|
this.cache = new Collection(limit);
|
|
836
|
+
Object.defineProperty(this, "client", {
|
|
837
|
+
value: client,
|
|
838
|
+
enumerable: false,
|
|
839
|
+
writable: false
|
|
840
|
+
});
|
|
833
841
|
}
|
|
834
|
-
cache;
|
|
835
842
|
/**
|
|
836
843
|
* Transforms raw data into a Structure, patches if existing, and saves to cache.
|
|
837
844
|
* @internal
|
|
@@ -1540,16 +1547,28 @@ var MemberRoleManager = class {
|
|
|
1540
1547
|
}
|
|
1541
1548
|
};
|
|
1542
1549
|
|
|
1550
|
+
// src/utils/Constants.ts
|
|
1551
|
+
var StoatCDN = "https://cdn.stoatusercontent.com";
|
|
1552
|
+
|
|
1543
1553
|
// src/structures/Member.ts
|
|
1544
1554
|
var Member = class extends Base {
|
|
1555
|
+
// The server ID the member is in
|
|
1545
1556
|
serverId;
|
|
1557
|
+
// The nickname the member has in the server, if any.
|
|
1546
1558
|
nickname = null;
|
|
1559
|
+
// The avatar the member has in the server, if any.
|
|
1547
1560
|
avatar = null;
|
|
1548
|
-
|
|
1561
|
+
/** @internal */
|
|
1562
|
+
_roles = [];
|
|
1563
|
+
// The date the member joined the server
|
|
1549
1564
|
joinedAt;
|
|
1565
|
+
// The date the member's timeout expires, or null if not timed out
|
|
1550
1566
|
timeout = null;
|
|
1567
|
+
// Whatever the user can talk in Voice Chat
|
|
1551
1568
|
canPublish = false;
|
|
1569
|
+
// Whatever the user can hear in Voice Chat
|
|
1552
1570
|
canRecieve = false;
|
|
1571
|
+
// Member roles manager
|
|
1553
1572
|
roles;
|
|
1554
1573
|
constructor(client, data) {
|
|
1555
1574
|
super(client, { _id: data.user._id });
|
|
@@ -1561,11 +1580,17 @@ var Member = class extends Base {
|
|
|
1561
1580
|
_patch(data) {
|
|
1562
1581
|
if (data.nickname !== void 0) this.nickname = data.nickname;
|
|
1563
1582
|
if (data.avatar !== void 0) this.avatar = data.avatar;
|
|
1564
|
-
if (data.roles !== void 0) this.
|
|
1583
|
+
if (data.roles !== void 0) this._roles = data.roles;
|
|
1565
1584
|
if (data.timeout !== void 0) this.timeout = data.timeout ? new Date(data.timeout) : null;
|
|
1566
1585
|
if (data.can_publish !== void 0) this.canPublish = data.canPublish;
|
|
1567
1586
|
if (data.can_recieve !== void 0) this.canRecieve = data.canRecieve;
|
|
1568
1587
|
}
|
|
1588
|
+
/**
|
|
1589
|
+
* Get member role IDs
|
|
1590
|
+
*/
|
|
1591
|
+
get roleIds() {
|
|
1592
|
+
return this._roles;
|
|
1593
|
+
}
|
|
1569
1594
|
/** Gets the global User object for this member */
|
|
1570
1595
|
get user() {
|
|
1571
1596
|
return this.client.users.cache.get(this.id);
|
|
@@ -1574,18 +1599,12 @@ var Member = class extends Base {
|
|
|
1574
1599
|
get server() {
|
|
1575
1600
|
return this.client.servers.cache.get(this.serverId);
|
|
1576
1601
|
}
|
|
1577
|
-
/** Resolves the array of role strings into actual Role objects */
|
|
1578
|
-
get roleObjects() {
|
|
1579
|
-
const server = this.server;
|
|
1580
|
-
if (!server) return [];
|
|
1581
|
-
return this.roleIds.map((id) => server.roles.cache.get(id)).filter((role) => role !== void 0);
|
|
1582
|
-
}
|
|
1583
1602
|
/** Calculates the member's total permissions using BigInt */
|
|
1584
1603
|
get permissions() {
|
|
1585
1604
|
const server = this.server;
|
|
1586
1605
|
if (!server) return 0n;
|
|
1587
1606
|
let totalPerms = server.defaultPermissions ?? 0n;
|
|
1588
|
-
for (const role of this.
|
|
1607
|
+
for (const role of this.roles.cache.values()) {
|
|
1589
1608
|
totalPerms |= BigInt(role.permissions);
|
|
1590
1609
|
}
|
|
1591
1610
|
if (server.ownerId === this.id) {
|
|
@@ -1593,40 +1612,76 @@ var Member = class extends Base {
|
|
|
1593
1612
|
}
|
|
1594
1613
|
return totalPerms;
|
|
1595
1614
|
}
|
|
1596
|
-
/**
|
|
1597
|
-
|
|
1598
|
-
|
|
1615
|
+
/** Get avatar URL for this member, or null if they don't have one.
|
|
1616
|
+
* @example
|
|
1617
|
+
* // Get a member's avatar URL
|
|
1618
|
+
* const avatarURL = member.avatarURL;
|
|
1619
|
+
* console.log(avatarURL); // https://cdn.stoat.chat/attachments/avatars/1234567890/avatar.png
|
|
1620
|
+
*/
|
|
1621
|
+
get avatarURL() {
|
|
1622
|
+
if (!this.avatar) return null;
|
|
1623
|
+
return `${StoatCDN}/attachments/avatars/${this.avatar.id}/${this.avatar.filename}`;
|
|
1599
1624
|
}
|
|
1600
1625
|
/**
|
|
1601
|
-
*
|
|
1626
|
+
* Ban this member from the server.
|
|
1627
|
+
* @param options The options for this ban
|
|
1628
|
+
* @example
|
|
1629
|
+
* // Ban a member with a reason and delete their messages from the last hour
|
|
1630
|
+
* await member.ban({ reason: "Spamming", deleteMessageSeconds: 3600 });
|
|
1602
1631
|
*/
|
|
1603
|
-
async
|
|
1632
|
+
async ban(options) {
|
|
1604
1633
|
let server = this.server;
|
|
1605
1634
|
if (!server) server = await this.client.servers.fetch(this.serverId);
|
|
1606
|
-
|
|
1635
|
+
await server.members.ban(this.id, options);
|
|
1607
1636
|
}
|
|
1608
1637
|
/**
|
|
1609
|
-
*
|
|
1638
|
+
* Creates a DM channel between the client's user and this member.
|
|
1639
|
+
* @param force If true, forces the creation of a new DM channel even if one already exists.
|
|
1640
|
+
* @returns A promise that resolves to the created DMChannel object.
|
|
1641
|
+
* @throws {Error} If the API request fails.
|
|
1642
|
+
* @example
|
|
1643
|
+
* // Create a DM with this member
|
|
1644
|
+
* const dm = await member.createDM();
|
|
1645
|
+
* console.log(`DM channel ID: ${dm.id}`);
|
|
1610
1646
|
*/
|
|
1611
|
-
async
|
|
1647
|
+
async createDM(force = false) {
|
|
1648
|
+
await this.client.users.createDM(this.id, { force });
|
|
1649
|
+
}
|
|
1650
|
+
/**
|
|
1651
|
+
* Timeout this member for a specified duration.
|
|
1652
|
+
* @param duration The duration of the timeout in milliseconds.
|
|
1653
|
+
* @example
|
|
1654
|
+
* // Timeout a member for 10 minutes (600,000 milliseconds)
|
|
1655
|
+
* await member.setTimeout(600000);
|
|
1656
|
+
*/
|
|
1657
|
+
async setTimeout(duration) {
|
|
1612
1658
|
let server = this.server;
|
|
1613
1659
|
if (!server) server = await this.client.servers.fetch(this.serverId);
|
|
1614
|
-
await server.members.
|
|
1660
|
+
await server.members.setTimeout(this.id, duration);
|
|
1661
|
+
}
|
|
1662
|
+
/** Checks if the member has a specific permission */
|
|
1663
|
+
hasPermission(permission) {
|
|
1664
|
+
return Permissions.has(this.permissions, permission);
|
|
1615
1665
|
}
|
|
1616
1666
|
/**
|
|
1617
|
-
*
|
|
1618
|
-
* @param options The options
|
|
1667
|
+
* Edit this member.
|
|
1668
|
+
* @param options The options to edit the member with (nickname, roles, timeout, etc.)
|
|
1669
|
+
* @returns A promise that resolves to the updated Member.
|
|
1619
1670
|
*/
|
|
1620
|
-
async
|
|
1671
|
+
async edit(options) {
|
|
1621
1672
|
let server = this.server;
|
|
1622
1673
|
if (!server) server = await this.client.servers.fetch(this.serverId);
|
|
1623
|
-
await server.members.
|
|
1674
|
+
return await server.members.edit(this.id, options);
|
|
1624
1675
|
}
|
|
1625
|
-
|
|
1626
|
-
|
|
1676
|
+
/**
|
|
1677
|
+
* Kick this member from the server.
|
|
1678
|
+
*/
|
|
1679
|
+
async kick() {
|
|
1680
|
+
let server = this.server;
|
|
1627
1681
|
if (!server) server = await this.client.servers.fetch(this.serverId);
|
|
1628
|
-
await server.members.
|
|
1682
|
+
await server.members.kick(this.id);
|
|
1629
1683
|
}
|
|
1684
|
+
/** @internal */
|
|
1630
1685
|
[util4.inspect.custom](depth, options, inspect10) {
|
|
1631
1686
|
const { client, serverId, ...props } = this;
|
|
1632
1687
|
return `${this.constructor.name} ${inspect10(
|
|
@@ -1664,17 +1719,41 @@ var MemberManager = class extends BaseManager {
|
|
|
1664
1719
|
}
|
|
1665
1720
|
return new Member(this.client, data);
|
|
1666
1721
|
}
|
|
1722
|
+
/**
|
|
1723
|
+
* Resolve a string or mention to Member
|
|
1724
|
+
* @param member The MemberResolvable to resolve
|
|
1725
|
+
* @returns The resolved Member or undefined if not found
|
|
1726
|
+
*/
|
|
1667
1727
|
resolve(member) {
|
|
1668
1728
|
if (member instanceof Member) return member;
|
|
1669
1729
|
if (member instanceof User) return this.cache.get(member.id);
|
|
1670
1730
|
if (typeof member === "string") return this.cache.get(member.replace(/[<@>]/g, ""));
|
|
1671
1731
|
return void 0;
|
|
1672
1732
|
}
|
|
1733
|
+
/**
|
|
1734
|
+
* Resolve a Member to their ID string.
|
|
1735
|
+
* @param member The MemberResolvable to resolve
|
|
1736
|
+
* @returns The resolved ID string
|
|
1737
|
+
* @throws {TypeError} If the provided resolvable is invalid
|
|
1738
|
+
*/
|
|
1673
1739
|
resolveId(member) {
|
|
1674
1740
|
if (typeof member === "string") return member.replace(/[<@>]/g, "");
|
|
1675
1741
|
if ("id" in member) return member.id;
|
|
1676
1742
|
throw new TypeError("Invalid MemberResolvable provided.");
|
|
1677
1743
|
}
|
|
1744
|
+
/**
|
|
1745
|
+
* Fetches a member from the server, or returns the cached version if available and not forced.
|
|
1746
|
+
* @param member The MemberResolvable to fetch
|
|
1747
|
+
* @param force Whether to bypass the cache and fetch fresh data from the API
|
|
1748
|
+
* @returns A promise that resolves to the fetched Member
|
|
1749
|
+
* @throws {Error} If the API request fails or the member is not found
|
|
1750
|
+
* @example
|
|
1751
|
+
* // Fetch a member by ID, using cache if available
|
|
1752
|
+
* const member = await server.members.fetch("1234567890");
|
|
1753
|
+
*
|
|
1754
|
+
* // Fetch a member by mention, bypassing cache
|
|
1755
|
+
* const member = await server.members.fetch("<@1234567890>", true);
|
|
1756
|
+
*/
|
|
1678
1757
|
async fetch(member, force = false) {
|
|
1679
1758
|
if (!force) {
|
|
1680
1759
|
const cached = this.resolve(member);
|
|
@@ -1721,6 +1800,14 @@ var MemberManager = class extends BaseManager {
|
|
|
1721
1800
|
* Edits a member in the server.
|
|
1722
1801
|
* @param member The MemberResolvable to edit.
|
|
1723
1802
|
* @param options The fields to update (nickname, roles, timeout, etc.).
|
|
1803
|
+
* @returns A promise that resolves to the updated Member.
|
|
1804
|
+
* @throws {Error} If the API request fails or the member is not found.
|
|
1805
|
+
* @example
|
|
1806
|
+
* // Change a member's nickname and add a role
|
|
1807
|
+
* const updatedMember = await server.members.edit("1234567890", {
|
|
1808
|
+
* nickname: "New Nickname",
|
|
1809
|
+
* roles: ["roleId1", "roleId2"],
|
|
1810
|
+
* });
|
|
1724
1811
|
*/
|
|
1725
1812
|
async edit(member, options) {
|
|
1726
1813
|
const id = this.resolveId(member);
|
|
@@ -1747,6 +1834,9 @@ var MemberManager = class extends BaseManager {
|
|
|
1747
1834
|
/**
|
|
1748
1835
|
* Kicks a member from the server.
|
|
1749
1836
|
* @param member The MemberResolvable to kick.
|
|
1837
|
+
* @example
|
|
1838
|
+
* // Kick a member by ID
|
|
1839
|
+
* await server.members.kick("1234567890");
|
|
1750
1840
|
*/
|
|
1751
1841
|
async kick(member) {
|
|
1752
1842
|
const id = this.resolveId(member);
|
|
@@ -1757,6 +1847,9 @@ var MemberManager = class extends BaseManager {
|
|
|
1757
1847
|
* Bans a member from the server.
|
|
1758
1848
|
* @param member The MemberResolvable to ban.
|
|
1759
1849
|
* @param options The ban options
|
|
1850
|
+
* @example
|
|
1851
|
+
* // Ban a member by ID
|
|
1852
|
+
* await server.members.ban("1234567890", { reason: "Spamming", deleteMessageSeconds: 3600 });
|
|
1760
1853
|
*/
|
|
1761
1854
|
async ban(member, options) {
|
|
1762
1855
|
const id = this.resolveId(member);
|
|
@@ -1769,11 +1862,26 @@ var MemberManager = class extends BaseManager {
|
|
|
1769
1862
|
/**
|
|
1770
1863
|
* Unbans a user from the server
|
|
1771
1864
|
* @param member The MemberResolvable to unban
|
|
1865
|
+
* @example
|
|
1866
|
+
* // Unban a member by ID
|
|
1867
|
+
* await server.members.unban("1234567890");
|
|
1772
1868
|
*/
|
|
1773
1869
|
async unban(member) {
|
|
1774
1870
|
const id = this.resolveId(member);
|
|
1775
1871
|
await this.client.rest.delete(`/servers/${this.server.id}/bans/${id}`);
|
|
1776
1872
|
}
|
|
1873
|
+
/**
|
|
1874
|
+
* Timeouts a member in the server for a specified duration.
|
|
1875
|
+
* @param member The MemberResolvable to timeout
|
|
1876
|
+
* @param duration The duration of the timeout in milliseconds
|
|
1877
|
+
* @example
|
|
1878
|
+
* // Timeout a member for 10 minutes
|
|
1879
|
+
* await server.members.setTimeout("1234567890", 10 * 60 * 1000);
|
|
1880
|
+
*/
|
|
1881
|
+
async setTimeout(member, duration) {
|
|
1882
|
+
const id = this.resolveId(member);
|
|
1883
|
+
await this.edit(id, { timeout: new Date(Date.now() + duration).toISOString() });
|
|
1884
|
+
}
|
|
1777
1885
|
[util5.inspect.custom]() {
|
|
1778
1886
|
return this.cache;
|
|
1779
1887
|
}
|
|
@@ -2138,7 +2246,7 @@ var RoleManager = class extends BaseManager {
|
|
|
2138
2246
|
* console.log("Role deleted successfully.");
|
|
2139
2247
|
*
|
|
2140
2248
|
* // Delete a role using a Role object
|
|
2141
|
-
* const role = await server.roles.fetch("
|
|
2249
|
+
* const role = await server.roles.fetch("01JE2MM759J5D7CHJF084R7");
|
|
2142
2250
|
* await server.roles.delete(role);
|
|
2143
2251
|
* console.log("Role deleted successfully.");
|
|
2144
2252
|
*
|
|
@@ -2626,6 +2734,38 @@ var UserManager = class extends BaseManager {
|
|
|
2626
2734
|
const data = await this.client.rest.patch(`/users/@me`, payload);
|
|
2627
2735
|
return this._add(data);
|
|
2628
2736
|
}
|
|
2737
|
+
/**
|
|
2738
|
+
* The DM between the client's user and a user
|
|
2739
|
+
*
|
|
2740
|
+
* @param {string} userId The user id
|
|
2741
|
+
* @returns {?DMChannel}
|
|
2742
|
+
* @private
|
|
2743
|
+
*/
|
|
2744
|
+
dmChannel(userId) {
|
|
2745
|
+
return this.client.channels.cache.find((channel) => channel.isDM() && channel.recipients.includes(userId)) ?? null;
|
|
2746
|
+
}
|
|
2747
|
+
/**
|
|
2748
|
+
* Creates a DM channel between the client's user and another user.
|
|
2749
|
+
* @param user The UserResolvable to create a DM with.
|
|
2750
|
+
* @param options Additional options for DM creation.
|
|
2751
|
+
* @param options.force If true, forces the creation of a new DM channel even if one already exists.
|
|
2752
|
+
* @returns A promise that resolves to the created DMChannel object.
|
|
2753
|
+
* @throws {TypeError} If an invalid UserResolvable is provided.
|
|
2754
|
+
* @throws {Error} If the API request fails.
|
|
2755
|
+
* @example
|
|
2756
|
+
* // Create a DM with a user by ID
|
|
2757
|
+
* const dm = await client.users.createDM("1234567890");
|
|
2758
|
+
* console.log(`DM channel ID: ${dm.id}`);
|
|
2759
|
+
*/
|
|
2760
|
+
async createDM(user, { force = false } = {}) {
|
|
2761
|
+
const id = this.resolveId(user);
|
|
2762
|
+
if (!force) {
|
|
2763
|
+
const dmChannel = this.dmChannel(id);
|
|
2764
|
+
if (dmChannel) return dmChannel;
|
|
2765
|
+
}
|
|
2766
|
+
const data = await this.client.rest.get(`/users/${id}/dm`);
|
|
2767
|
+
return this.client.channels._add(data);
|
|
2768
|
+
}
|
|
2629
2769
|
};
|
|
2630
2770
|
|
|
2631
2771
|
// src/managers/SweepManager.ts
|
|
@@ -2780,3 +2920,4 @@ export {
|
|
|
2780
2920
|
UserPresence,
|
|
2781
2921
|
UserRelationship
|
|
2782
2922
|
};
|
|
2923
|
+
//# sourceMappingURL=index.js.map
|