feat: battle intro
This commit is contained in:
parent
2cc16e68c4
commit
c0c45f75ac
98
index.js
98
index.js
|
@ -3,15 +3,16 @@ const postgres = require('postgres');
|
||||||
|
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
const sql = postgres({
|
const sql = postgres({
|
||||||
host: 'hackclub.app',
|
host: '/var/run/postgresql',
|
||||||
port: 5432,
|
|
||||||
database: 'haroon_slackmaster',
|
database: 'haroon_slackmaster',
|
||||||
username: 'haroon',
|
username: 'haroon'
|
||||||
password: process.env.PGSQL_PASSWORD,
|
|
||||||
ssl: 'require'
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const BeginnerOpponents = require('./opponents/beginner.json');
|
const BeginnerOpponents = require('./opponents/beginner');
|
||||||
|
|
||||||
|
const AllOpponents = [
|
||||||
|
...BeginnerOpponents
|
||||||
|
]
|
||||||
|
|
||||||
const app = new App({
|
const app = new App({
|
||||||
token: process.env.SLACK_BOT_TOKEN,
|
token: process.env.SLACK_BOT_TOKEN,
|
||||||
|
@ -29,7 +30,7 @@ async function initializeUser(slackUserId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(async (ctx) => {
|
app.use(async (ctx) => {
|
||||||
await initializeUser(ctx.body.user_id)
|
await initializeUser(ctx.context.userId)
|
||||||
|
|
||||||
await ctx.next()
|
await ctx.next()
|
||||||
})
|
})
|
||||||
|
@ -37,9 +38,31 @@ app.use(async (ctx) => {
|
||||||
app.command('/chooseopponent', async (ctx) => {
|
app.command('/chooseopponent', async (ctx) => {
|
||||||
await ctx.ack();
|
await ctx.ack();
|
||||||
|
|
||||||
|
const user = await initializeUser(ctx.body.user_id);
|
||||||
|
|
||||||
|
if (user.currentopponent != "None") {
|
||||||
|
const opponent = AllOpponents.find(x => x.rawId == user.currentopponent)
|
||||||
|
|
||||||
|
return await ctx.respond({
|
||||||
|
response_type: 'ephemeral',
|
||||||
|
text: `You are already in a battle with ${opponent.name}.`,
|
||||||
|
blocks: [
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
text: {
|
||||||
|
type: 'mrkdwn',
|
||||||
|
text: `*Battle Master:* You are already in a battle with *${opponent.name}*. Please finish your battle with them before proceeding.
|
||||||
|
${user.battlemessage}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
await ctx.client.views.open({
|
await ctx.client.views.open({
|
||||||
trigger_id: ctx.body.trigger_id,
|
trigger_id: ctx.body.trigger_id,
|
||||||
view: {
|
view: {
|
||||||
|
"private_metadata": ctx.payload.channel_id,
|
||||||
"type": "modal",
|
"type": "modal",
|
||||||
"callback_id": "chooseopponent",
|
"callback_id": "chooseopponent",
|
||||||
"title": {
|
"title": {
|
||||||
|
@ -234,6 +257,7 @@ app.view("chooseopponent", async (ctx) => {
|
||||||
await ctx.ack({
|
await ctx.ack({
|
||||||
response_action: 'update',
|
response_action: 'update',
|
||||||
view: {
|
view: {
|
||||||
|
"private_metadata": ctx.payload.private_metadata,
|
||||||
"type": "modal",
|
"type": "modal",
|
||||||
"callback_id": "chooseopponent-" + rank,
|
"callback_id": "chooseopponent-" + rank,
|
||||||
"title": {
|
"title": {
|
||||||
|
@ -292,11 +316,63 @@ app.view("chooseopponent", async (ctx) => {
|
||||||
app.view("chooseopponent-BEGINNER", async (ctx) => {
|
app.view("chooseopponent-BEGINNER", async (ctx) => {
|
||||||
await ctx.ack();
|
await ctx.ack();
|
||||||
|
|
||||||
// const userId =
|
const channelId = ctx.view.private_metadata;
|
||||||
|
const userId = ctx.context.userId;
|
||||||
|
|
||||||
// ctx.client.chat.postMessage({
|
const slackUser = (await ctx.client.users.info({ user: userId })).user.profile;
|
||||||
// channel: ""
|
|
||||||
// })
|
const opponent = BeginnerOpponents.find(o => o.rawId == Object.values(ctx.payload.state.values)[0].opponents.selected_option.value);
|
||||||
|
|
||||||
|
const player = await initializeUser(userId);
|
||||||
|
|
||||||
|
await sql`UPDATE users
|
||||||
|
SET playerhealth = ${player.health},
|
||||||
|
playermin = ${player.mindmg},
|
||||||
|
playermax = ${player.maxdmg},
|
||||||
|
|
||||||
|
currentOpponent = ${opponent.rawId},
|
||||||
|
|
||||||
|
opponenthealth = ${opponent.stats.health},
|
||||||
|
opponentmin = ${opponent.stats.min},
|
||||||
|
opponentmax = ${opponent.stats.max}
|
||||||
|
|
||||||
|
WHERE slack_id = ${userId};`
|
||||||
|
|
||||||
|
const msg = await ctx.client.chat.postMessage({
|
||||||
|
channel: channelId,
|
||||||
|
text: `${slackUser.display_name_normalized} started a battle against ${opponent.name}.`,
|
||||||
|
blocks: [
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
text: {
|
||||||
|
type: 'mrkdwn',
|
||||||
|
text: opponent.intro.replaceAll("{player}", slackUser.display_name_normalized)
|
||||||
|
},
|
||||||
|
"accessory": {
|
||||||
|
"type": "image",
|
||||||
|
"image_url": opponent.image,
|
||||||
|
"alt_text": opponent.name
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "actions",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"text": {
|
||||||
|
"type": "plain_text",
|
||||||
|
"text": "Continue",
|
||||||
|
"emoji": true
|
||||||
|
},
|
||||||
|
"value": "continue",
|
||||||
|
"action_id": "continue"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
await sql`UPDATE users SET battlemessage = ${`https://hackclub.slack.com/archives/${channelId}/p${msg.ts.replace('.', '')}`} WHERE slack_id = ${userId};`
|
||||||
})
|
})
|
||||||
|
|
||||||
app.command('/bm-eval', async (ctx) => {
|
app.command('/bm-eval', async (ctx) => {
|
||||||
|
|
23
opponents/beginner.js
Normal file
23
opponents/beginner.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
module.exports = [
|
||||||
|
{
|
||||||
|
"rawId": "rapStar",
|
||||||
|
"name": "Rap Star",
|
||||||
|
"stats": {
|
||||||
|
"health": 25,
|
||||||
|
"min": 2,
|
||||||
|
"max": 5
|
||||||
|
},
|
||||||
|
"image": "https://media.discordapp.net/attachments/1108683335347212389/1118119440702242816/BM_-_Rap_Star_1.png?ex=6674a820&is=667356a0&hm=520cf408d3cadad838b0d2350fb212470949257cbd2768bfea64523feb33b494&",
|
||||||
|
"intro": `*_{player} walks down the streets of Vibe City minding their own business until suddenly Rap Star appears with his hand pointing directly at {player}_*
|
||||||
|
|
||||||
|
*Rap Star:* Beep!
|
||||||
|
*{player}:* Erm... Hi?
|
||||||
|
*Rap Star:* Beep boop bop
|
||||||
|
*{player}:* Is this some kind of joke? Do you speak English?
|
||||||
|
|
||||||
|
*_Rap Star throws his microphone at {player}'s head. They get knocked down._*
|
||||||
|
|
||||||
|
*{player}:* Is that how you're gonna be? Fine then, let's battle!
|
||||||
|
*Rap Star:* BEEP!`
|
||||||
|
}
|
||||||
|
]
|
|
@ -1,11 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"rawId": "beginnerOpponent1",
|
|
||||||
"name": "Beginner Opponent #1",
|
|
||||||
"stats": {
|
|
||||||
"health": 30,
|
|
||||||
"min": 10,
|
|
||||||
"max": 15
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
Loading…
Reference in a new issue