From fb253423f13ed42a253a05cbd4477b672697bb69 Mon Sep 17 00:00:00 2001 From: DaInfLoop Date: Sun, 7 Jul 2024 02:09:04 +0100 Subject: [PATCH] initial commit: i love pain --- .gitignore | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 15 +++++ bun.lockb | Bin 0 -> 78518 bytes index.ts | 102 +++++++++++++++++++++++++++++ package.json | 18 ++++++ tsconfig.json | 27 ++++++++ 6 files changed, 337 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 index.ts create mode 100644 package.json create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa6b949 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# uno + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.1.8. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..e5b738ad27dcd9f328586e252cfe0f43db5bd36a GIT binary patch literal 78518 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 l9@ { + await ctx.ack(); + + const gameId = ctx.payload.channel_id; + + const exists = await sql`SELECT * FROM games WHERE gameId = ${gameId};` + + if (exists.length) { + return ctx.respond({ + text: "Yeah uh... there's already a game in this channel. Sorry." + }) + } + + await sql`INSERT INTO games VALUES (${gameId}, ${[ ctx.context.userId! ]})`; + + ctx.respond({ + response_type: 'in_channel', + text: "To join the game, view this in your client. If you see this in the client, update your Slack.", + blocks: [ + { + type: 'section', + text: { + type: 'mrkdwn', + text: `:hyper-dino-wave-flip: Righto, <@${ctx.context.userId}>! Starting a new game of Blazing 8s. To join, click the join button below:` + } + }, + { + "type": "actions", + "elements": [ + { + "type": "button", + "text": { + "type": "plain_text", + "text": "Join Game", + "emoji": true + }, + "value": gameId, + "action_id": "joinGame" + }, + { + "type": "button", + "text": { + "type": "plain_text", + "text": "View Players", + "emoji": true + }, + "value": gameId, + "action_id": "viewCurrentPlayers" + } + ] + } + ] + }) +}) + +app.action("joinGame", async (ctx) => { + await ctx.ack(); + + await sql`UPDATE games SET players = players || ARRAY[${ctx.context.userId!}] WHERE gameId = ${(ctx.action as ButtonAction).value!}`; + + ctx.respond({ + response_type: 'ephemeral', + text: 'Okie dokie! You\'ve been added.' + }) +}) + +app.action("viewCurrentPlayers", async (ctx) => { + await ctx.ack(); + + const players = await sql`SELECT * FROM games WHERE gameId = ${(ctx.action as ButtonAction).value!}`; + + ctx.respond({ + response_type: 'ephemeral', + text: `There are ${players.length} in-game.` + }) +}) + +; (async () => { + await app.start({ path: "/run/user/2151/uno-bot.sock" }); + + console.log('⚡️ Bolt app is running!'); +})(); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..4635843 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "uno", + "module": "index.ts", + "type": "module", + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "@slack/bolt": "^3.19.0", + "@types/uuid": "^10.0.0", + "dotenv": "^16.4.5", + "postgres": "^3.4.4", + "uuid": "^10.0.0" + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}