From 7188a33a7090cf7a7c75e9753edd1b1a64ad7572 Mon Sep 17 00:00:00 2001 From: Muthu Kumar Date: Thu, 6 Aug 2020 13:13:48 +0530 Subject: [PATCH] [init] Signed-off-by: Muthu Kumar --- package.json | 4 ++-- src/index.ts | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 1570d3d..250cf37 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "@telecraft/plugin", + "name": "@telecraft/telegram-auth", "version": "0.0.1", - "description": "Boilerplate for Telecraft plugins", + "description": " Telegram auth for Minecraft servers, powered by Telecraft", "main": "dist", "scripts": { "build": "tsc --importHelpers", diff --git a/src/index.ts b/src/index.ts index 7cf7f29..fcf2d71 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,66 @@ 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 = { - name: "telecraft-plugin", + name: "telegram-auth", plugin: (config, events, store, server) => { - // do something cool + if (!config.enable) return; + + 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) { + events.emit(["telegram", "send"], { user: tgUser, msg: "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); + events.emit(["telegram", "send"], { user: tgUser, msg: `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.`); + events.emit(["telegram", "send"], { + user: tgUser, + msg: `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) { + events.emit(["telegram", "send"], { user: tgUser, msg: `Not linked to a Minecraft player. Send /link first.` }); + } + }); }, }; + +export default auth;