diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f584ecf --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# ---> Node +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git +node_modules + +bot-token.txt \ No newline at end of file diff --git a/README.md b/README.md index b027412..ba388d0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # Jolbon-Emoji-Bot +telegram bot using jolbon emoji \ No newline at end of file diff --git a/exception.txt b/exception.txt new file mode 100644 index 0000000..c23f630 --- /dev/null +++ b/exception.txt @@ -0,0 +1,3 @@ +LeinneSW +kawaii_latina +Khinenw diff --git a/index.js b/index.js new file mode 100644 index 0000000..cb58949 --- /dev/null +++ b/index.js @@ -0,0 +1,124 @@ +const TelegramBot = require('node-telegram-bot-api') +const fs = require('fs') + +const filter = require('./src/filter.js') +const Sender = require('./src/sender.js') + +const commandManager = require('./src/commandManager.js') + +const bot_token = fs.readFileSync('./bot-token.txt') +const bot = new TelegramBot(bot_token, { polling: true }) + +const sender = new Sender(bot) + +let exception = [ + '' +] + +const command = new commandManager() + +fs.readFile('./exception.txt', (err, data) => { + if (err) { + console.log(err) + } + + exception = [] + const line = (data + '').split('\r\n') + for (const l of line) { + exception.push(l) + } +}) + +fs.watch('./exception.txt', { encoding: 'buffer' }, (event, filename) => { + if (filename) { + fs.readFile('./exception.txt', (err, data) => { + if (err) { + console.log(err) + } + + exception = [] + const line = (data + '').split('\r\n') + for (const l of line) { + exception.push(l) + } + }) + } +}) + +bot.on('message', message => { + const user = message.from.username + const text = message.text + const date = message.date + + if (!text || Number(new Date()) - date < 5000) { + return + } + + if (text[0] === '/') { + let name = text.replace(/\//, '') + + if (/@jolbon_emoji_bot/g.test(text)) + name = name.replace(/@jolbon_emoji_bot.{0,}/g, '') + else + name = name.replace(/ .{0,}/g, '') + + let parameter = [] + if (/ /g.test(text)) { + parameter = text.split(' ') + parameter.shift() + } + + const c = command.getCommand(name) + switch (name) { + case 'off': + c.execute(user, parameter).then(data => { + sender.send(message.chat.id, data + '님이 사용을 중단하였습니다.', message.message_id) + }).catch(err => { + sender.send(message.chat.id, err + '님은 이미 사용 중단 중입니다.', message.message_id) + }) + break + case 'on': + c.execute(user, parameter).then(data => { + sender.send(message.chat.id, data + '님이 사용을 허가하였습니다.', message.message_id) + }).catch(err => { + sender.send(message.chat.id, err + '님은 이미 사용중입니다.', message.message_id) + }) + break + case 'list': + c.execute(user, parameter).then(data => { + sender.send(message.chat.id, data, message.message_id) + }).catch(err => { + sender.send(message.chat.id, 'ERROR: ' + err, message.message_id) + }) + break + } + } + + for (const e of exception) { + if (user == e) { + return + } + } + + ; (async () => { + let result = await filter.correct(text) + result = filter.spacing(result, /[^ㄱ-ㅎ][ㄱ-ㅎ]/g) + result = filter.spacing(result, /[ㄱ-ㅎ][^ㄱ-ㅎ]/g) + result = filter.spacing(result, /[ㄱ-ㅎ가-힣][a-zA-Z]/g) + result = filter.spacing(result, /[a-zA-Z][ㄱ-ㅎ가-힣]/g) + + if (result != '') { + let replyId = message.message_id + + if (message.reply_to_message) { + replyId = message.reply_to_message.message_id + } + + sender.sendSticker(message.chat.id, result, replyId) + } + })() +}) + +bot.on('polling_error', (error) => { + console.log(error) +}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3a8231c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,817 @@ +{ + "name": "jolbon", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "10.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.10.3.tgz", + "integrity": "sha512-dWk7F3b0m6uDLHero7tsnpAi9r2RGPQHGbb0/VCv7DPJRMFtk3RonY1/29vfJKnheRMBa7+uF+vunlg/mBGlxg==" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "array.prototype.findindex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.0.2.tgz", + "integrity": "sha1-WAaNJYh+9QXknckssAxE3O5VsGc=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", + "requires": { + "ms": "^2.1.1" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "hanspell": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/hanspell/-/hanspell-0.6.4.tgz", + "integrity": "sha512-q7ejthbSMI/4Vcpq8/LOfwCs7bu/DMYM8z3t/5rxuTb64oiMsFDPWIyQc1eVjK7jjwe8y9hIdyhv9x1XcFRP5Q==", + "requires": { + "chalk": "^2.4.1", + "html-entities": "^1.2.1", + "minimatch": "^3.0.4", + "readline": "^1.3.0", + "request": "^2.87.0", + "unescape": "^1.0.1" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "requires": { + "mime-db": "~1.36.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node-telegram-bot-api": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.30.0.tgz", + "integrity": "sha512-+EeM+fe3Xt81KIPqN3L6s6eK+FK4QaqyDcwCwkY/jqsleERXwwjGlVbf4lJCOZ0uJuF5PfqTmvVNtua7AZfBXg==", + "requires": { + "array.prototype.findindex": "^2.0.2", + "bl": "^1.2.1", + "bluebird": "^3.5.1", + "debug": "^3.1.0", + "depd": "^1.1.1", + "eventemitter3": "^3.0.0", + "file-type": "^3.9.0", + "mime": "^1.6.0", + "pump": "^2.0.0", + "request": "^2.83.0", + "request-promise": "^4.2.2" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "requires": { + "@types/node": "*" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", + "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "^4.13.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7092e73 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "jolbon", + "version": "1.0.0", + "description": "", + "main": "index.js", + "dependencies": { + "cheerio": "^1.0.0-rc.2", + "hanspell": "^0.6.4", + "node-telegram-bot-api": "^0.30.0" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Su-Yong", + "license": "Apache-2.0" +} diff --git a/src/commandManager.js b/src/commandManager.js new file mode 100644 index 0000000..8c19719 --- /dev/null +++ b/src/commandManager.js @@ -0,0 +1,26 @@ +const commandAddException = require('./commands/commandAddException.js') +const commandRemoveException = require('./commands/commandRemoveException.js') +const commandListException = require('./commands/commandListException.js') + +class command { + constructor () { + this.commands = [ + new commandAddException(), + new commandRemoveException(), + new commandListException() + ] + } + + getCommands () { + return this.commands + } + + getCommand (name) { + for (const c of this.commands) { + if (c.name === name) + return c + } + } +} + +module.exports = command \ No newline at end of file diff --git a/src/commands/command.js b/src/commands/command.js new file mode 100644 index 0000000..f52e240 --- /dev/null +++ b/src/commands/command.js @@ -0,0 +1,24 @@ +class command { + constructor (name, parameter) { + this.name = name + this.parameter = parameter + + /* + none + string + string string + -> + this.parameter = [['object'], ['string'], ['string', 'string']] + + null -> JUST NOTHING + 1 -> 'number' + 'a' -> 'string' + */ + } + + execute (sender, parameter) { + + } +} + +module.exports = command \ No newline at end of file diff --git a/src/commands/commandAddException.js b/src/commands/commandAddException.js new file mode 100644 index 0000000..5adf86a --- /dev/null +++ b/src/commands/commandAddException.js @@ -0,0 +1,62 @@ +const fs = require('fs') + +const command = require('./command.js') + +class commandAddException extends command { + constructor() { + super('off', [ + ['string'], + [] + ]) + } + + execute(sender, parameter) { + let target = null + + let i = 0 + for (const compare of this.parameter) { + const receive = parameter.map(e => { + return typeof e + }) + + if (compare.sort().toString() === receive.sort().toString()) { + switch(i) { + case 0: + target = parameter[0] + break + case 1: + target = sender + break + } + } + + i++ + } + + return new Promise((resolve, reject) => { + fs.readFile('./exception.txt', (err, data) => { + if (err) { + reject(err) + } + + const line = (data + '').split('\r\n') + for (const l of line) { + if (l == target) { + reject(target) + + return + } + } + + fs.writeFile('./exception.txt', data + target + '\r\n', err => { + if (err) + reject(err) + + resolve(target) + }) + }) + }) + } +} + +module.exports = commandAddException \ No newline at end of file diff --git a/src/commands/commandListException.js b/src/commands/commandListException.js new file mode 100644 index 0000000..ee4aca0 --- /dev/null +++ b/src/commands/commandListException.js @@ -0,0 +1,29 @@ +const fs = require('fs') + +const command = require('./command.js') + +class commandListException extends command { + constructor () { + super('list', [ + [], + ]) + } + + execute (sender, parameter) { + return new Promise((resolve, reject) => { + fs.readFile('./exception.txt', (err, data) => { + if (err) { + console.log(err) + } + + if (data == '') { + resolve('예외 목록이 없습니다.') + } else { + resolve('예외 목록:\n' + data) + } + }) + }) + } +} + +module.exports = commandListException \ No newline at end of file diff --git a/src/commands/commandRemoveException.js b/src/commands/commandRemoveException.js new file mode 100644 index 0000000..6787231 --- /dev/null +++ b/src/commands/commandRemoveException.js @@ -0,0 +1,73 @@ +const fs = require('fs') + +const command = require('./command.js') + +class commandRemoveException extends command { + constructor () { + super('on', [ + ['string'], + [] + ]) + } + + execute (sender, parameter) { + let target = null + + let i = 0 + for (const compare of this.parameter) { + const receive = parameter.map(e => { + return typeof e + }) + + if (compare.sort().toString() === receive.sort().toString()) { + switch(i) { + case 0: + target = parameter[0] + break + case 1: + target = sender + break + } + } + + i++ + } + + return new Promise((resolve, reject) => { + fs.readFile('./exception.txt', (err, data) => { + if (err) + reject(err) + + const line = (data + '').split('\r\n') + let list = '' + let checker = false + + for (const l of line) { + if (l == target) { + checker = true + continue + } + + if (l == '') { + continue + } + + list += l + '\r\n' + } + + if (checker) { + fs.writeFile('./exception.txt', list, err => { + if (err) + reject(err) + + resolve(target) + }) + } else { + reject(target) + } + }) + }) + } +} + +module.exports = commandRemoveException \ No newline at end of file diff --git a/src/filter.js b/src/filter.js new file mode 100644 index 0000000..0f16315 --- /dev/null +++ b/src/filter.js @@ -0,0 +1,88 @@ +const hanspell = require('hanspell') + +function toOrigin(first, origin) { + first = first.trim() + const phrase = first.split(' ') + + let j = 0 + return phrase.map((e, i) => { + const v = origin.substring(j, j + e.length) + j = j + e.length + + return v + }).join(' ') +} + +function setException(text) { + text = text.replace(/졸본 특/g, '졸본특 ') + text = text.replace(/호고 곡/g, '호고곡') + text = text.replace(/하심시오/g, ' 하심시오') + text = text.replace(/하심 시오/g, ' 하심시오') + text = text.replace(/알 갯슴니다/g, '알겟슴니다') + text = text.replace(/해라/g, ' 해라') + text = text.replace(/ㅋ{2,}/g, ' ') + + return text +} + +class filter { + constructor() { } + + static trimming(text) { + text = text.replace(/[~!@#$%^&*()_+|<>?:;'"{},.]/g, '') + text = text.replace(/하심시오/g, '해라') + text = text.replace(/심시오/g, '라') + text = text.replace(/ /g, '') + + return text + } + + static correct(text) { + return new Promise((resolve, reject) => { + if (!text) { + resolve('') + } + + let origin = filter.trimming(text) + let first = origin + let result = '' + + hanspell.spellCheckByDAUM(origin, 6000, data => { + for (const d of data) { + let blank = '' + let suggestion = d.suggestions[0] + + if (d.type === 'space') { + blank = ' ' + } + first = first.replace(d.token + '', blank + suggestion) + } + + result = toOrigin(first, origin) + result = setException(result) + + resolve(result) + }, () => { }, reject) + }) + } + + static spacing(text, reg) { + if (reg.test(text)) { + const phrase = text.split(reg) + const backup = text.match(reg) + + let j = 0 + text = phrase.map((e, i) => { + if (j < backup.length) { + return e + backup[j][0] + ' ' + backup[j++][1] + } else { + return e + } + }).join('') + } + + return text + } +} + +module.exports = filter \ No newline at end of file diff --git a/src/sender.js b/src/sender.js new file mode 100644 index 0000000..efb3719 --- /dev/null +++ b/src/sender.js @@ -0,0 +1,116 @@ +const jolbonCon = { + '았': 'CAADBQADVwEAAs69jALqYBB3oD_I_AI', + '머': 'CAADBQADUwEAAs69jAIpz6K9TdszLgI', + '방가방가': 'CAADBQADXgEAAs69jAKH6_3VFldpxAI', + '본의아니게': 'CAADBQADVAEAAs69jALhFpdJOf59vAI', + 'ㅇㅈㄹ': 'CAADBQADVQEAAs69jAK74jqo3SJi6gI', + '안물': 'CAADBQADVgEAAs69jAKuZzZxHD1oWQI', + '원격하심시오': 'CAADBQADWAEAAs69jAKignKXf1RwLAI', + '원격해라': 'CAADBQADYAEAAs69jAJ6xPEXdrx-fQI', + '장난하심시오': 'CAADBQADWQEAAs69jAITaw22zhKJZwI', + 'ㄴㅈ': 'CAADBQADWgEAAs69jAL-4guoSMWg3wI', + '졸본특1': 'CAADBQADWwEAAs69jAIuUZPYcZenhQI', + '졸본특2': 'CAADBQADXwEAAs69jAJGDjeHy6MMWQI', + '굴복': 'CAADBQADXAEAAs69jALZm-KP1PTDlwI', + '졸하': 'CAADBQADXQEAAs69jAIyxakUlJpbuwI', + 'ㅗ1': 'CAADBQADPgADwIw_ByR4JlBYvwbhAg', + 'ㅗ2': 'CAADBQADPwADwIw_B0OgzHjNXMzRAg', + '않이': 'CAADBQADUQEAAs69jAL83BzKgKXJlAI', + '이응': 'CAADBQADQgADwIw_B9jQJ1o7OAxbAg', + 'ㅇ': 'CAADBQADQwADwIw_B8GCq_QAAXU1jwI', + '안녕하심시오': 'CAADBQADTQEAAs69jAJH_AWVkFSJIgI', + '호고곡1': 'CAADBQADUAEAAs69jAJwa9wc-z9b5QI', + '호고곡2': 'CAADBQADUgEAAs69jALVwyNO5Q7zRgI', + '나데지마심시오': 'CAADBQADBwADOT4-Df6BbRWaYIHvAg', + 'ㅇㅋ': 'CAADBQADCgADOT4-DWE89ykL8iM0Ag', + '저항을멈추심시오': 'CAADBQADTwEAAs69jAKJQuU0pNaidgI', + 'php1': 'CAADBQADCAADOT4-DS-baJoxmz-FAg', + 'ㅉㅉ': 'CAADBQADCwADOT4-DRIBcRWTnVq1Ag', + '졸본왕국': 'CAADBQADDQADOT4-DdgtWKNf1a94Ag', + 'php2': 'CAADBQADQAADwIw_B3OOhpxlb6ZuAg', + 'c': 'CAADBQADQQADwIw_B6N_BEjVSY_bAg', + '닥치심시오': 'CAADBQADAQADYx2-EK3plO8R_4bOAg' +} + +function getSticker (text) { + switch (text) { + case '앗': case '았': case '아았': case '아앗': + return jolbonCon['았'] + case '뭐': + return jolbonCon['머'] + case '하이': case '졸하': case 'ㅎㅇ': case '졸하이': case '졸하이심시오': case 'ㅎㅇㅎㅇ': case '하이하이': + return jolbonCon[Math.random() > 0.5 ? '졸하' : '방가방가'] + case '졸본의': case '본의아니계': case '졸본의아니계': case '졸본의아니게': case '본의': + return jolbonCon['본의아니게'] + case '장난': + return jolbonCon['장난하심시오'] + case 'ㄵ': case '노잼': case '개노잼': + return jolbonCon['ㄴㅈ'] + case '졸본특': + return jolbonCon[Math.random() > 0.5 ? '졸본특1' : '졸본특2'] + case 'ㅗ': + return jolbonCon[Math.random() > 0.5 ? 'ㅗ1' : 'ㅗ2'] + case '않이': + return jolbonCon['않이'] + case 'ㅇ': case '응': + return jolbonCon[Math.random() > 0.5 ? 'ㅇ' : '이응'] + case '안녕': + return jolbonCon['안녕하심시오'] + case '호고곡': + return jolbonCon[Math.random() > 0.5 ? '호고곡1' : '호고곡2'] + case '나대지마십시오': case '나대지': case '나데지': case '나대지마': case '나데지마': + return jolbonCon[Math.random() > 0.2 ? '나데지마심시오' : '졸본왕국'] + case '알겟슴니다': case '알겟읍니다': case '알갯슴니다': case '알갯읍니다': + return jolbonCon['ㅇㅋ'] + case '원격': + return jolbonCon[Math.random() > 0.5 ? '원격하심시오' : '원격해라'] + case '저항을': case '저항': + return jolbonCon['저항을멈추심시오'] + case '성능이': case 'php': case 'pmmp': case 'PMMP': case 'Pmmp': + return jolbonCon[Math.random() > 0.5 ? 'php1': 'php2'] + case '노답': case 'ㄴㄷ': case 'ㅉㅉ': + return jolbonCon[Math.random() > 0.5 ? 'ㅉㅉ' : '졸본왕국'] + case 'ㄷㅊ': case '닥쳐': case '닥치라': + return jolbonCon['닥치심시오'] + default: + return jolbonCon[text] + } +} + +class sender { + constructor (bot) { + this.bot = bot + } + + sendSticker(id, text, reply) { + if (text.indexOf(' ') != -1) { + const phrase = text.split(' ') + + for (const p of phrase) { + const sticker = getSticker(p) + + if (sticker) { + this.bot.sendSticker(id, sticker, { + reply_to_message_id: reply + }) + } + } + } else { + const sticker = getSticker(text) + + if (sticker) { + this.bot.sendSticker(id, sticker, { + reply_to_message_id: reply + }) + } + } + } + + send(id, text, reply) { + this.bot.sendMessage(id, text, { + reply_to_message_id: reply + }) + } +} + +module.exports = sender \ No newline at end of file