@satorijs/adapter-discord 4.0.4 → 4.1.1
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/lib/index.js +122 -18
- package/lib/index.js.map +3 -3
- package/lib/message.d.ts +4 -0
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -100,6 +100,7 @@ var import_satori2 = require("@satorijs/satori");
|
|
|
100
100
|
|
|
101
101
|
// satori/adapters/discord/src/types/internal.ts
|
|
102
102
|
var import_satori = require("@satorijs/satori");
|
|
103
|
+
var logger = new import_satori.Logger("discord");
|
|
103
104
|
var _Internal = class _Internal {
|
|
104
105
|
constructor(http) {
|
|
105
106
|
this.http = http;
|
|
@@ -130,6 +131,7 @@ var _Internal = class _Internal {
|
|
|
130
131
|
throw new Error(`too many arguments for ${path}, received ${raw}`);
|
|
131
132
|
}
|
|
132
133
|
try {
|
|
134
|
+
logger.debug(`${method} ${url}`, config);
|
|
133
135
|
return await this.http(method, url, config);
|
|
134
136
|
} catch (error) {
|
|
135
137
|
if (!import_satori.Quester.isAxiosError(error) || !error.response)
|
|
@@ -312,7 +314,7 @@ Internal.define({
|
|
|
312
314
|
|
|
313
315
|
// satori/adapters/discord/src/types/channel.ts
|
|
314
316
|
var Channel2;
|
|
315
|
-
((
|
|
317
|
+
((Channel11) => {
|
|
316
318
|
let Type;
|
|
317
319
|
((Type2) => {
|
|
318
320
|
Type2[Type2["GUILD_TEXT"] = 0] = "GUILD_TEXT";
|
|
@@ -328,7 +330,7 @@ var Channel2;
|
|
|
328
330
|
Type2[Type2["GUILD_STAGE_VOICE"] = 13] = "GUILD_STAGE_VOICE";
|
|
329
331
|
Type2[Type2["GUILD_DIRECTORY"] = 14] = "GUILD_DIRECTORY";
|
|
330
332
|
Type2[Type2["GUILD_FORUM"] = 15] = "GUILD_FORUM";
|
|
331
|
-
})(Type =
|
|
333
|
+
})(Type = Channel11.Type || (Channel11.Type = {}));
|
|
332
334
|
})(Channel2 || (Channel2 = {}));
|
|
333
335
|
var OverwriteType = /* @__PURE__ */ ((OverwriteType2) => {
|
|
334
336
|
OverwriteType2[OverwriteType2["ROLE"] = 0] = "ROLE";
|
|
@@ -749,7 +751,7 @@ Internal.define({
|
|
|
749
751
|
|
|
750
752
|
// satori/adapters/discord/src/types/message.ts
|
|
751
753
|
var Message2;
|
|
752
|
-
((
|
|
754
|
+
((Message5) => {
|
|
753
755
|
let Type;
|
|
754
756
|
((Type2) => {
|
|
755
757
|
Type2[Type2["DEFAULT"] = 0] = "DEFAULT";
|
|
@@ -779,14 +781,14 @@ var Message2;
|
|
|
779
781
|
Type2[Type2["ROLE_SUBSCRIPTION_PURCHASE"] = 25] = "ROLE_SUBSCRIPTION_PURCHASE";
|
|
780
782
|
Type2[Type2["INTERACTION_PREMIUM_UPSELL"] = 26] = "INTERACTION_PREMIUM_UPSELL";
|
|
781
783
|
Type2[Type2["GUILD_APPLICATION_PREMIUM_SUBSCRIPTION"] = 32] = "GUILD_APPLICATION_PREMIUM_SUBSCRIPTION";
|
|
782
|
-
})(Type =
|
|
784
|
+
})(Type = Message5.Type || (Message5.Type = {}));
|
|
783
785
|
let ActivityType2;
|
|
784
786
|
((ActivityType3) => {
|
|
785
787
|
ActivityType3[ActivityType3["JOIN"] = 1] = "JOIN";
|
|
786
788
|
ActivityType3[ActivityType3["SPECTATE"] = 2] = "SPECTATE";
|
|
787
789
|
ActivityType3[ActivityType3["LISTEN"] = 3] = "LISTEN";
|
|
788
790
|
ActivityType3[ActivityType3["JOIN_REQUEST"] = 5] = "JOIN_REQUEST";
|
|
789
|
-
})(ActivityType2 =
|
|
791
|
+
})(ActivityType2 = Message5.ActivityType || (Message5.ActivityType = {}));
|
|
790
792
|
let Flag;
|
|
791
793
|
((Flag2) => {
|
|
792
794
|
Flag2[Flag2["CROSSPOSTED"] = 1] = "CROSSPOSTED";
|
|
@@ -798,7 +800,7 @@ var Message2;
|
|
|
798
800
|
Flag2[Flag2["EPHEMERAL"] = 64] = "EPHEMERAL";
|
|
799
801
|
Flag2[Flag2["LOADING"] = 128] = "LOADING";
|
|
800
802
|
Flag2[Flag2["FAILED_TO_MENTION_SOME_ROLES_IN_THREAD"] = 256] = "FAILED_TO_MENTION_SOME_ROLES_IN_THREAD";
|
|
801
|
-
})(Flag =
|
|
803
|
+
})(Flag = Message5.Flag || (Message5.Flag = {}));
|
|
802
804
|
})(Message2 || (Message2 = {}));
|
|
803
805
|
Internal.define({
|
|
804
806
|
"/channels/{channel.id}/messages": {
|
|
@@ -1396,6 +1398,57 @@ async function adaptSession(bot, input) {
|
|
|
1396
1398
|
session.messageId = input.d.id;
|
|
1397
1399
|
session.content = "";
|
|
1398
1400
|
session.event.argv = decodeArgv(data, command);
|
|
1401
|
+
} else if (input.t === "INTERACTION_CREATE" && input.d.type === Interaction.Type.MODAL_SUBMIT) {
|
|
1402
|
+
const data = input.d.data;
|
|
1403
|
+
if (!data.custom_id.startsWith("input:"))
|
|
1404
|
+
return;
|
|
1405
|
+
const user_input = data.components[0].components[0].value;
|
|
1406
|
+
await bot.internal.createInteractionResponse(input.d.id, input.d.token, {
|
|
1407
|
+
type: Interaction.CallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE
|
|
1408
|
+
});
|
|
1409
|
+
session.type = "interaction/command";
|
|
1410
|
+
session.isDirect = !input.d.guild_id;
|
|
1411
|
+
session.subtype = input.d.guild_id ? "group" : "private";
|
|
1412
|
+
session.channelId = input.d.channel_id;
|
|
1413
|
+
session.guildId = input.d.guild_id;
|
|
1414
|
+
session.userId = session.isDirect ? input.d.user.id : input.d.member.user.id;
|
|
1415
|
+
session.messageId = input.d.id;
|
|
1416
|
+
session.content = user_input;
|
|
1417
|
+
} else if (input.t === "INTERACTION_CREATE" && input.d.type === Interaction.Type.MESSAGE_COMPONENT) {
|
|
1418
|
+
const id = input.d.data.custom_id;
|
|
1419
|
+
if (id.startsWith("input:")) {
|
|
1420
|
+
await bot.internal.createInteractionResponse(input.d.id, input.d.token, {
|
|
1421
|
+
type: Interaction.CallbackType.MODAL,
|
|
1422
|
+
data: {
|
|
1423
|
+
custom_id: id,
|
|
1424
|
+
title: "title",
|
|
1425
|
+
components: [{
|
|
1426
|
+
type: 1 /* ACTION_ROW */,
|
|
1427
|
+
components: [{
|
|
1428
|
+
custom_id: id,
|
|
1429
|
+
type: 4 /* TEXT_INPUT */,
|
|
1430
|
+
label: "auto complete",
|
|
1431
|
+
value: id.slice("input:".length),
|
|
1432
|
+
style: 1
|
|
1433
|
+
}]
|
|
1434
|
+
}]
|
|
1435
|
+
}
|
|
1436
|
+
});
|
|
1437
|
+
} else {
|
|
1438
|
+
await bot.internal.createInteractionResponse(input.d.id, input.d.token, {
|
|
1439
|
+
type: Interaction.CallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE
|
|
1440
|
+
});
|
|
1441
|
+
}
|
|
1442
|
+
session.type = "interaction/button";
|
|
1443
|
+
session.isDirect = !input.d.guild_id;
|
|
1444
|
+
session.channelId = input.d.channel_id;
|
|
1445
|
+
session.guildId = input.d.guild_id;
|
|
1446
|
+
session.userId = session.isDirect ? input.d.user.id : input.d.member.user.id;
|
|
1447
|
+
session.messageId = input.d.id;
|
|
1448
|
+
session.content = "";
|
|
1449
|
+
session.event.button = {
|
|
1450
|
+
id
|
|
1451
|
+
};
|
|
1399
1452
|
} else if (input.t === "CHANNEL_UPDATE") {
|
|
1400
1453
|
session.type = "channel-updated";
|
|
1401
1454
|
session.guildId = input.d.guild_id;
|
|
@@ -1485,7 +1538,7 @@ __name(encodeCommandOptions, "encodeCommandOptions");
|
|
|
1485
1538
|
// satori/adapters/discord/src/message.ts
|
|
1486
1539
|
var import_satori3 = require("@satorijs/satori");
|
|
1487
1540
|
var import_form_data = __toESM(require("form-data"));
|
|
1488
|
-
var
|
|
1541
|
+
var logger2 = new import_satori3.Logger("discord");
|
|
1489
1542
|
var _State = class _State {
|
|
1490
1543
|
// forward: send the first message and create a thread
|
|
1491
1544
|
constructor(type) {
|
|
@@ -1507,6 +1560,8 @@ var _DiscordMessageEncoder = class _DiscordMessageEncoder extends import_satori3
|
|
|
1507
1560
|
figure = null;
|
|
1508
1561
|
mode = "default";
|
|
1509
1562
|
listType = null;
|
|
1563
|
+
rows = [];
|
|
1564
|
+
buttonGroupState = false;
|
|
1510
1565
|
async getUrl() {
|
|
1511
1566
|
var _a, _b, _c, _d;
|
|
1512
1567
|
const input = (_b = (_a = this.options) == null ? void 0 : _a.session) == null ? void 0 : _b.discord;
|
|
@@ -1553,7 +1608,7 @@ var _DiscordMessageEncoder = class _DiscordMessageEncoder extends import_satori3
|
|
|
1553
1608
|
} catch (e) {
|
|
1554
1609
|
if (import_satori3.Quester.isAxiosError(e) && e.response) {
|
|
1555
1610
|
if (((_a = e.response.data) == null ? void 0 : _a.code) === 10015) {
|
|
1556
|
-
|
|
1611
|
+
logger2.debug("webhook has been deleted, recreating..., %o", e.response.data);
|
|
1557
1612
|
if (!this.bot.webhookLock[this.channelId])
|
|
1558
1613
|
this.bot.webhooks[this.channelId] = null;
|
|
1559
1614
|
await this.ensureWebhook();
|
|
@@ -1618,9 +1673,35 @@ var _DiscordMessageEncoder = class _DiscordMessageEncoder extends import_satori3
|
|
|
1618
1673
|
const content = this.buffer.trim();
|
|
1619
1674
|
if (!content)
|
|
1620
1675
|
return;
|
|
1676
|
+
this.addition.components = this.rows;
|
|
1621
1677
|
await this.post({ ...this.addition, content });
|
|
1622
1678
|
this.buffer = "";
|
|
1623
1679
|
this.addition = {};
|
|
1680
|
+
this.rows = [];
|
|
1681
|
+
}
|
|
1682
|
+
decodeButton(attrs, label) {
|
|
1683
|
+
if (attrs.type === "link") {
|
|
1684
|
+
return {
|
|
1685
|
+
type: 2 /* BUTTON */,
|
|
1686
|
+
url: attrs.href,
|
|
1687
|
+
label,
|
|
1688
|
+
style: 5
|
|
1689
|
+
};
|
|
1690
|
+
} else if (attrs.type === "action") {
|
|
1691
|
+
return {
|
|
1692
|
+
type: 2 /* BUTTON */,
|
|
1693
|
+
custom_id: attrs.id,
|
|
1694
|
+
label,
|
|
1695
|
+
style: 1
|
|
1696
|
+
};
|
|
1697
|
+
} else if (attrs.type === "input") {
|
|
1698
|
+
return {
|
|
1699
|
+
type: 2 /* BUTTON */,
|
|
1700
|
+
custom_id: "input:" + attrs.text,
|
|
1701
|
+
label,
|
|
1702
|
+
style: 1
|
|
1703
|
+
};
|
|
1704
|
+
}
|
|
1624
1705
|
}
|
|
1625
1706
|
async visit(element) {
|
|
1626
1707
|
var _a;
|
|
@@ -1795,6 +1876,29 @@ var _DiscordMessageEncoder = class _DiscordMessageEncoder extends import_satori3
|
|
|
1795
1876
|
this.stack[1].author = {};
|
|
1796
1877
|
}
|
|
1797
1878
|
}
|
|
1879
|
+
} else if (type === "button") {
|
|
1880
|
+
if (this.buttonGroupState) {
|
|
1881
|
+
const last = this.rows[this.rows.length - 1];
|
|
1882
|
+
last.components.push(this.decodeButton(
|
|
1883
|
+
attrs,
|
|
1884
|
+
children.join("")
|
|
1885
|
+
));
|
|
1886
|
+
} else {
|
|
1887
|
+
this.rows.push({
|
|
1888
|
+
type: 1 /* ACTION_ROW */,
|
|
1889
|
+
components: [
|
|
1890
|
+
this.decodeButton(attrs, children.join(""))
|
|
1891
|
+
]
|
|
1892
|
+
});
|
|
1893
|
+
}
|
|
1894
|
+
} else if (type === "button-group") {
|
|
1895
|
+
this.buttonGroupState = true;
|
|
1896
|
+
this.rows.push({
|
|
1897
|
+
type: 1 /* ACTION_ROW */,
|
|
1898
|
+
components: []
|
|
1899
|
+
});
|
|
1900
|
+
await this.render(children);
|
|
1901
|
+
this.buttonGroupState = false;
|
|
1798
1902
|
} else if (type === "message" && attrs.forward) {
|
|
1799
1903
|
this.stack.unshift(new State("forward"));
|
|
1800
1904
|
await this.render(children);
|
|
@@ -1828,7 +1932,7 @@ var DiscordMessageEncoder = _DiscordMessageEncoder;
|
|
|
1828
1932
|
|
|
1829
1933
|
// satori/adapters/discord/src/ws.ts
|
|
1830
1934
|
var import_satori4 = require("@satorijs/satori");
|
|
1831
|
-
var
|
|
1935
|
+
var logger3 = new import_satori4.Logger("discord");
|
|
1832
1936
|
var _WsClient = class _WsClient extends import_satori4.Adapter.WsClient {
|
|
1833
1937
|
_d = 0;
|
|
1834
1938
|
_ping;
|
|
@@ -1842,7 +1946,7 @@ var _WsClient = class _WsClient extends import_satori4.Adapter.WsClient {
|
|
|
1842
1946
|
return this.bot.http.ws(url + "/?v=10&encoding=json");
|
|
1843
1947
|
}
|
|
1844
1948
|
heartbeat() {
|
|
1845
|
-
|
|
1949
|
+
logger3.debug(`heartbeat d ${this._d}`);
|
|
1846
1950
|
this.socket.send(JSON.stringify({
|
|
1847
1951
|
op: Gateway.Opcode.HEARTBEAT,
|
|
1848
1952
|
d: this._d
|
|
@@ -1855,16 +1959,16 @@ var _WsClient = class _WsClient extends import_satori4.Adapter.WsClient {
|
|
|
1855
1959
|
try {
|
|
1856
1960
|
parsed = JSON.parse(data.toString());
|
|
1857
1961
|
} catch (error) {
|
|
1858
|
-
return
|
|
1962
|
+
return logger3.warn("cannot parse message", data);
|
|
1859
1963
|
}
|
|
1860
|
-
|
|
1964
|
+
logger3.debug(require("util").inspect(parsed, false, null, true));
|
|
1861
1965
|
if (parsed.s) {
|
|
1862
1966
|
this._d = parsed.s;
|
|
1863
1967
|
}
|
|
1864
1968
|
if (parsed.op === Gateway.Opcode.HELLO) {
|
|
1865
1969
|
this._ping = setInterval(() => this.heartbeat(), parsed.d.heartbeat_interval);
|
|
1866
1970
|
if (this._sessionId) {
|
|
1867
|
-
|
|
1971
|
+
logger3.debug("resuming");
|
|
1868
1972
|
this.socket.send(JSON.stringify({
|
|
1869
1973
|
op: Gateway.Opcode.RESUME,
|
|
1870
1974
|
d: {
|
|
@@ -1889,7 +1993,7 @@ var _WsClient = class _WsClient extends import_satori4.Adapter.WsClient {
|
|
|
1889
1993
|
if (parsed.d)
|
|
1890
1994
|
return;
|
|
1891
1995
|
this._sessionId = "";
|
|
1892
|
-
|
|
1996
|
+
logger3.warn("offline: invalid session");
|
|
1893
1997
|
(_a = this.socket) == null ? void 0 : _a.close();
|
|
1894
1998
|
}
|
|
1895
1999
|
if (parsed.op === Gateway.Opcode.DISPATCH) {
|
|
@@ -1902,7 +2006,7 @@ var _WsClient = class _WsClient extends import_satori4.Adapter.WsClient {
|
|
|
1902
2006
|
this._sessionId = parsed.d.session_id;
|
|
1903
2007
|
this._resumeUrl = parsed.d.resume_gateway_url;
|
|
1904
2008
|
this.bot.user = decodeUser(parsed.d.user);
|
|
1905
|
-
|
|
2009
|
+
logger3.debug("session_id " + this._sessionId);
|
|
1906
2010
|
return this.bot.online();
|
|
1907
2011
|
}
|
|
1908
2012
|
if (parsed.t === "RESUMED") {
|
|
@@ -1913,7 +2017,7 @@ var _WsClient = class _WsClient extends import_satori4.Adapter.WsClient {
|
|
|
1913
2017
|
this.bot.dispatch(session);
|
|
1914
2018
|
}
|
|
1915
2019
|
if (parsed.op === Gateway.Opcode.RECONNECT) {
|
|
1916
|
-
|
|
2020
|
+
logger3.warn("offline: discord request reconnect");
|
|
1917
2021
|
(_b = this.socket) == null ? void 0 : _b.close();
|
|
1918
2022
|
}
|
|
1919
2023
|
});
|
|
@@ -1935,7 +2039,7 @@ var WsClient = _WsClient;
|
|
|
1935
2039
|
|
|
1936
2040
|
// satori/adapters/discord/src/bot.ts
|
|
1937
2041
|
var import_package = require("../package.json");
|
|
1938
|
-
var
|
|
2042
|
+
var logger4 = new import_satori5.Logger("discord");
|
|
1939
2043
|
var _DiscordBot = class _DiscordBot extends import_satori5.Bot {
|
|
1940
2044
|
http;
|
|
1941
2045
|
internal;
|
|
@@ -2097,7 +2201,7 @@ var _DiscordBot = class _DiscordBot extends import_satori5.Bot {
|
|
|
2097
2201
|
this.commands = commands;
|
|
2098
2202
|
const updates = commands.map(encodeCommand);
|
|
2099
2203
|
if (updates.length) {
|
|
2100
|
-
|
|
2204
|
+
logger4.debug("update %d command(s)", updates.length);
|
|
2101
2205
|
await this.internal.bulkOverwriteGlobalApplicationCommands(this.selfId, updates);
|
|
2102
2206
|
}
|
|
2103
2207
|
}
|