From d2e868f94a833b0754c1ad612cc586424e82fa95 Mon Sep 17 00:00:00 2001 From: Atreya Bain Date: Tue, 16 Jun 2020 15:40:36 +0530 Subject: [PATCH] twss add --- README.md | 2 ++ package-lock.json | 27 +++++++++++++++++++++++ package.json | 3 ++- src/@types/twss/index.d.ts | 7 ++++++ src/tg/replyStrategy.ts | 44 +++++++++++++++++++++++++++++++------- 5 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 src/@types/twss/index.d.ts diff --git a/README.md b/README.md index c883166..be0f1b3 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Telegram bot deployed using Heroku. A test on async await, and typescript. Since this project is IO-bound(mostly), it makes sense to use Node and Typescript. +Special thanks to: [`twss`](https://github.com/DanielRapp/twss.js) + ## Usage *You don't* diff --git a/package-lock.json b/package-lock.json index 9c8a090..9118e22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -119,6 +119,11 @@ "mimic-response": "^1.0.0" } }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -265,6 +270,14 @@ "wrappy": "1" } }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "~0.0.2" + } + }, "p-cancelable": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", @@ -297,12 +310,26 @@ "lowercase-keys": "^2.0.0" } }, + "twss": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/twss/-/twss-0.1.6.tgz", + "integrity": "sha1-k8sxeYJGQ8gsD5B7b+35fE94leo=", + "requires": { + "colors": "*", + "optimist": "0.3" + } + }, "typescript": { "version": "3.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", "dev": true }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index e77644b..c37b69e 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "typescript": "^3.9.5" }, "dependencies": { - "got": "^11.3.0" + "got": "^11.3.0", + "twss": "^0.1.6" } } diff --git a/src/@types/twss/index.d.ts b/src/@types/twss/index.d.ts new file mode 100644 index 0000000..0214945 --- /dev/null +++ b/src/@types/twss/index.d.ts @@ -0,0 +1,7 @@ +declare module 'twss'{ + export let threshold:number; + export let algo:string; + export function is(arg:string):boolean; + export function probability(arg:string):number; + export function prob(arg:string):number; +} \ No newline at end of file diff --git a/src/tg/replyStrategy.ts b/src/tg/replyStrategy.ts index 49aa68c..34697a9 100644 --- a/src/tg/replyStrategy.ts +++ b/src/tg/replyStrategy.ts @@ -1,6 +1,6 @@ import { getUpdateResultBody, sendMessage } from '../misc/defs'; - +import twss from 'twss'; /** @@ -13,33 +13,61 @@ export async function replyStrategy(updates: getUpdateResultBody[]) { const textMessages = updates.filter(e => e.message && e.message.text); - + //Log stats - if (textMessages.length > 0||nonTextMessages.length > 0) { + if (textMessages.length > 0 || nonTextMessages.length > 0) { console.log(`Got: ${textMessages.length} text messages,${nonTextMessages.length} weird stuff`); } const textReplies = await replyText(textMessages); const nonTextReplies = await replyNonText(nonTextMessages); - return [...textReplies,...nonTextReplies]; + return [...textReplies, ...nonTextReplies]; } export async function replyText(updates: getUpdateResultBody[]): Promise { return updates.map(e => { + const { text, reply_to_message_id } = getReplyTextSingle(e) return { chat_id: e.message?.from?.id as number, - reply_to_message_id: e.message?.message_id, - text: 'Hello World!' + reply_to_message_id, + text }; }) } -export async function replyNonText(updates: getUpdateResultBody[]):Promise { +export function getReplyTextSingle(update: getUpdateResultBody): { text: string, reply_to_message_id?: number } { + //get commands first + if ((update.message?.text ?? '').toLowerCase().startsWith('/get')) { + const text = update.message?.text ?? ''; + const caseval = text.split(' '); + if (caseval.length > 1) { + switch (caseval[1]) { + case 'prob': + return { text: twss.threshold.toString(), reply_to_message_id: update.message?.message_id } + case 'algo': + return { text: twss.algo, reply_to_message_id: update.message?.message_id } + default: + return {text: 'No.', reply_to_message_id: update.message?.message_id } + } + } else { + return { text: 'No.', reply_to_message_id: update.message?.message_id } + } + } + + //then a twss :P + if (twss.is(update.message?.text ?? '')) { + return { text: "That's what she said ( ͡° ͜ʖ ͡°)", reply_to_message_id: update.message?.message_id }; + } + + return { text: ':D' }; +} + +export async function replyNonText(updates: getUpdateResultBody[]): Promise { return updates.map(e => { - return { + return { chat_id: e.message?.from?.id as number, text: 'This is useless to me :(', reply_to_message_id: e.message?.message_id