This repository was archived by the owner on Jan 6, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
82 lines (69 loc) · 2.28 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { Plugin } from "@telecraft/types";
// Get 4 random numbers
const rand = () => String(Math.ceil(Math.random() * 10000));
const gamemodes = ["survival", "creative", "adventure", "survival"];
const auth: Plugin<
{ enable: boolean },
{ telegram: { send: (user: string, msg: string) => void } }
> = {
name: "telegram-auth",
plugin: ({ config = {}, dependencies: { telegram = null } = {} } = {}) => (
events,
store,
server,
) => {
if (!config.enable) return;
if (!telegram)
throw new Error(
"[@telecraft/telegram-auth] Plugin was enabled, but dependency 'telegram' was not passed",
);
events.on("minecraft:join", async ctx => {
const tgUser = await store.get(["minecraft", ctx.user, "tgUser"]);
server.send(`data get entity ${ctx.user} playerGameType`);
server.send(`data get entity ${ctx.user} Pos`);
server.send(`data get entity ${ctx.user} Dimension`);
server.send(`effect give ${ctx.user} minecraft:blindness 1000000`);
server.send(`effect give ${ctx.user} minecraft:slowness 1000000 255`);
server.send(`gamemode spectator ${ctx.user}`);
if (tgUser) {
telegram.send(tgUser, "Send /auth to authenticate yourself.");
} else {
server.send(`tellraw ${ctx.user} Send /link to the Telegram bot.`);
}
});
events.on("telegram:link", async ctx => {
const token = rand();
const tgUser = ctx.user;
await store.set(["telegram", token, "tgUser"], tgUser);
telegram.send(tgUser, `Send !link ${token} in Minecraft chat to link.`);
});
events.on("minecraft:message", async ctx => {
const [cmd, ...rest] = ctx.msg.split(" ");
if (cmd === "!link") {
const [token] = rest;
const tgUser = await store.get(["telegram", token, "tgUser"]);
if (token && tgUser) {
await store.set(["telegram", tgUser, "user"], ctx.user);
server.send(
`tellraw ${ctx.user} Successfully linked with Telegram user.`,
);
telegram.send(
tgUser,
`Successfully linked with Minecraft player ${ctx.user}.`,
);
}
}
});
events.on("telegram:auth", async ctx => {
const tgUser = ctx.user;
const player = await store.get(["telegram", tgUser, "user"]);
if (!player) {
telegram.send(
tgUser,
`Not linked to a Minecraft player. Send /link first.`,
);
}
});
},
};
export default auth;