Compare commits
17 commits
Author | SHA1 | Date | |
---|---|---|---|
Ethan Lane | 53656ba0da | ||
Ethan Lane | 27b6224b5e | ||
Ethan Lane | e584c1291b | ||
Ethan Lane | 976445fa0d | ||
Ethan Lane | 27a4019f00 | ||
Ethan Lane | f6c744cdcf | ||
Ethan Lane | a03a62277d | ||
Ethan Lane | 75315b3db2 | ||
Ethan Lane | 25f605e623 | ||
Ethan Lane | 1395a65344 | ||
Ethan Lane | fd16500315 | ||
Ethan Lane | a581bf9d80 | ||
Ethan Lane | 1b707c4517 | ||
Ethan Lane | 5c6c0e65c3 | ||
Ethan Lane | ebec66607f | ||
Ethan Lane | f12bb11ffb | ||
Ethan Lane | 837013835e |
|
@ -7,7 +7,7 @@
|
||||||
# any secret values.
|
# any secret values.
|
||||||
|
|
||||||
BOT_TOKEN=
|
BOT_TOKEN=
|
||||||
BOT_VER=0.6.0
|
BOT_VER=0.6.4
|
||||||
BOT_AUTHOR=Vylpes
|
BOT_AUTHOR=Vylpes
|
||||||
BOT_OWNERID=147392775707426816
|
BOT_OWNERID=147392775707426816
|
||||||
BOT_CLIENTID=682942374040961060
|
BOT_CLIENTID=682942374040961060
|
||||||
|
|
|
@ -17,9 +17,10 @@ jobs:
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18.x
|
node-version: 18.x
|
||||||
- run: npm ci
|
- run: yarn install --frozen-lockfile
|
||||||
- run: npm run build
|
- run: yarn build
|
||||||
- run: npm test
|
- run: yarn test
|
||||||
|
- run: yarn lint
|
||||||
|
|
||||||
- name: "Copy files over to location"
|
- name: "Copy files over to location"
|
||||||
run: cp -r . ${{ secrets.PROD_REPO_PATH }}
|
run: cp -r . ${{ secrets.PROD_REPO_PATH }}
|
||||||
|
|
|
@ -17,9 +17,10 @@ jobs:
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18.x
|
node-version: 18.x
|
||||||
- run: npm ci
|
- run: yarn install --frozen-lockfile
|
||||||
- run: npm run build
|
- run: yarn build
|
||||||
- run: npm test
|
- run: yarn test
|
||||||
|
- run: yarn lint
|
||||||
|
|
||||||
- name: "Copy files over to location"
|
- name: "Copy files over to location"
|
||||||
run: cp -r . ${{ secrets.STAGE_REPO_PATH }}
|
run: cp -r . ${{ secrets.STAGE_REPO_PATH }}
|
||||||
|
|
|
@ -19,6 +19,7 @@ jobs:
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18.x
|
node-version: 18.x
|
||||||
- run: npm ci
|
- run: yarn install --frozen-lockfile
|
||||||
- run: npm run build
|
- run: yarn build
|
||||||
- run: npm test
|
- run: yarn test
|
||||||
|
- run: yarn lint
|
11758
package-lock.json
generated
11758
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "card-drop",
|
"name": "card-drop",
|
||||||
"version": "0.6.0",
|
"version": "0.6.4",
|
||||||
"main": "./dist/bot.js",
|
"main": "./dist/bot.js",
|
||||||
"typings": "./dist",
|
"typings": "./dist",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import CardConstants from "../constants/CardConstants";
|
||||||
export default class Claim extends ButtonEvent {
|
export default class Claim extends ButtonEvent {
|
||||||
public override async execute(interaction: ButtonInteraction) {
|
public override async execute(interaction: ButtonInteraction) {
|
||||||
if (!interaction.guild || !interaction.guildId) return;
|
if (!interaction.guild || !interaction.guildId) return;
|
||||||
|
if (!interaction.channel) return;
|
||||||
|
|
||||||
await interaction.deferUpdate();
|
await interaction.deferUpdate();
|
||||||
|
|
||||||
|
@ -21,18 +22,29 @@ export default class Claim extends ButtonEvent {
|
||||||
|
|
||||||
AppLogger.LogSilly("Button/Claim", `Parameters: cardNumber=${cardNumber}, claimId=${claimId}, droppedBy=${droppedBy}, userId=${userId}`);
|
AppLogger.LogSilly("Button/Claim", `Parameters: cardNumber=${cardNumber}, claimId=${claimId}, droppedBy=${droppedBy}, userId=${userId}`);
|
||||||
|
|
||||||
|
const user = await User.FetchOneById(User, userId) || new User(userId, CardConstants.StartingCurrency);
|
||||||
|
|
||||||
|
AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`);
|
||||||
|
|
||||||
|
if (!user.RemoveCurrency(CardConstants.ClaimCost)) {
|
||||||
|
await interaction.channel.send(`${interaction.user}, Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const claimed = await eClaim.FetchOneByClaimId(claimId);
|
const claimed = await eClaim.FetchOneByClaimId(claimId);
|
||||||
|
|
||||||
if (claimed) {
|
if (claimed) {
|
||||||
await interaction.reply("This card has already been claimed");
|
await interaction.channel.send(`${interaction.user}, This card has already been claimed!`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (claimId == CoreClient.ClaimId && userId != droppedBy) {
|
if (claimId == CoreClient.ClaimId && userId != droppedBy) {
|
||||||
await interaction.reply("The latest dropped card can only be claimed by the user who dropped it");
|
await interaction.channel.send(`${interaction.user}, The latest dropped card can only be claimed by the user who dropped it!`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await user.Save(User, user);
|
||||||
|
|
||||||
let inventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
|
let inventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
|
||||||
|
|
||||||
if (!inventory) {
|
if (!inventory) {
|
||||||
|
@ -43,17 +55,6 @@ export default class Claim extends ButtonEvent {
|
||||||
|
|
||||||
await inventory.Save(Inventory, inventory);
|
await inventory.Save(Inventory, inventory);
|
||||||
|
|
||||||
const user = await User.FetchOneById(User, userId) || new User(userId, CardConstants.StartingCurrency);
|
|
||||||
|
|
||||||
AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`);
|
|
||||||
|
|
||||||
if (!user.RemoveCurrency(CardConstants.ClaimCost)) {
|
|
||||||
await interaction.reply(`Not enough currency! You need 10 currency, you have ${user.Currency}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await user.Save(User, user);
|
|
||||||
|
|
||||||
const claim = new eClaim(claimId);
|
const claim = new eClaim(claimId);
|
||||||
claim.SetInventory(inventory);
|
claim.SetInventory(inventory);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@ import Config from "../database/entities/app/Config";
|
||||||
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import AppLogger from "../client/appLogger";
|
import AppLogger from "../client/appLogger";
|
||||||
|
import User from "../database/entities/app/User";
|
||||||
|
import CardConstants from "../constants/CardConstants";
|
||||||
|
|
||||||
export default class Reroll extends ButtonEvent {
|
export default class Reroll extends ButtonEvent {
|
||||||
public override async execute(interaction: ButtonInteraction) {
|
public override async execute(interaction: ButtonInteraction) {
|
||||||
|
@ -23,6 +25,20 @@ export default class Reroll extends ButtonEvent {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let user = await User.FetchOneById(User, interaction.user.id);
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
user = new User(interaction.user.id, CardConstants.StartingCurrency);
|
||||||
|
await user.Save(User, user);
|
||||||
|
|
||||||
|
AppLogger.LogInfo("Commands/Drop", `New user (${interaction.user.id}) saved to the database`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.Currency < CardConstants.ClaimCost) {
|
||||||
|
await interaction.reply(`Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const randomCard = CardDropHelperMetadata.GetRandomCard();
|
const randomCard = CardDropHelperMetadata.GetRandomCard();
|
||||||
|
|
||||||
if (!randomCard) {
|
if (!randomCard) {
|
||||||
|
|
|
@ -22,14 +22,14 @@ export default class Trade extends ButtonEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async AcceptTrade(interaction: ButtonInteraction) {
|
private async AcceptTrade(interaction: ButtonInteraction) {
|
||||||
const giveUserId = interaction.customId.split(" ")[2];
|
const user1UserId = interaction.customId.split(" ")[2];
|
||||||
const receiveUserId = interaction.customId.split(" ")[3];
|
const user2UserId = interaction.customId.split(" ")[3];
|
||||||
const giveCardNumber = interaction.customId.split(" ")[4];
|
const user1CardNumber = interaction.customId.split(" ")[4];
|
||||||
const receiveCardNumber = interaction.customId.split(" ")[5];
|
const user2CardNumber = interaction.customId.split(" ")[5];
|
||||||
const expiry = interaction.customId.split(" ")[6];
|
const expiry = interaction.customId.split(" ")[6];
|
||||||
const timeoutId = interaction.customId.split(" ")[7];
|
const timeoutId = interaction.customId.split(" ")[7];
|
||||||
|
|
||||||
AppLogger.LogSilly("Button/Trade/AcceptTrade", `Parameters: giveUserId=${giveUserId}, receiveUserId=${receiveUserId}, giveCardNumber=${giveCardNumber}, receiveCardNumber=${receiveCardNumber}, expiry=${expiry}, timeoutId=${timeoutId}`);
|
AppLogger.LogSilly("Button/Trade/AcceptTrade", `Parameters: user1UserId=${user1UserId}, user2UserId=${user2UserId}, user1CardNumber=${user1CardNumber}, user2CardNumber=${user2CardNumber}, expiry=${expiry}, timeoutId=${timeoutId}`);
|
||||||
|
|
||||||
const expiryDate = new Date(expiry);
|
const expiryDate = new Date(expiry);
|
||||||
|
|
||||||
|
@ -38,80 +38,80 @@ export default class Trade extends ButtonEvent {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interaction.user.id !== receiveUserId) {
|
if (interaction.user.id !== user2UserId) {
|
||||||
await interaction.reply("You are not the user who the trade is intended for");
|
await interaction.reply("You are not the user who the trade is intended for");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const giveItem = CoreClient.Cards
|
const user1Item = CoreClient.Cards
|
||||||
.flatMap(x => x.cards)
|
.flatMap(x => x.cards)
|
||||||
.find(x => x.id === giveCardNumber);
|
.find(x => x.id === user1CardNumber);
|
||||||
|
|
||||||
const receiveItem = CoreClient.Cards
|
const user2Item = CoreClient.Cards
|
||||||
.flatMap(x => x.cards)
|
.flatMap(x => x.cards)
|
||||||
.find(x => x.id === receiveCardNumber);
|
.find(x => x.id === user2CardNumber);
|
||||||
|
|
||||||
if (!giveItem || !receiveItem) {
|
if (!user1Item || !user2Item) {
|
||||||
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const giveUser = interaction.client.users.cache.get(giveUserId) || await interaction.client.users.fetch(giveUserId);
|
const user1User = interaction.client.users.cache.get(user1UserId) || await interaction.client.users.fetch(user1UserId);
|
||||||
const receiveUser = interaction.client.users.cache.get(receiveUserId) || await interaction.client.users.fetch(receiveUserId);
|
const user2User = interaction.client.users.cache.get(user2UserId) || await interaction.client.users.fetch(user2UserId);
|
||||||
|
|
||||||
const giveUserInventory1 = await Inventory.FetchOneByCardNumberAndUserId(giveUserId, giveCardNumber);
|
const user1UserInventory1 = await Inventory.FetchOneByCardNumberAndUserId(user1UserId, user1CardNumber);
|
||||||
const receiveUserInventory1 = await Inventory.FetchOneByCardNumberAndUserId(receiveUserId, receiveCardNumber);
|
const user2UserInventory1 = await Inventory.FetchOneByCardNumberAndUserId(user2UserId, user2CardNumber);
|
||||||
|
|
||||||
if (!giveUserInventory1 || !receiveUserInventory1) {
|
if (!user1UserInventory1 || !user2UserInventory1) {
|
||||||
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (giveUserInventory1.Quantity < 1 || receiveUserInventory1.Quantity < 1) {
|
if (user1UserInventory1.Quantity < 1 || user2UserInventory1.Quantity < 1) {
|
||||||
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
giveUserInventory1.SetQuantity(giveUserInventory1.Quantity - 1);
|
user1UserInventory1.SetQuantity(user1UserInventory1.Quantity - 1);
|
||||||
receiveUserInventory1.SetQuantity(receiveUserInventory1.Quantity - 1);
|
user2UserInventory1.SetQuantity(user2UserInventory1.Quantity - 1);
|
||||||
|
|
||||||
await giveUserInventory1.Save(Inventory, giveUserInventory1);
|
await user1UserInventory1.Save(Inventory, user1UserInventory1);
|
||||||
await receiveUserInventory1.Save(Inventory, receiveUserInventory1);
|
await user2UserInventory1.Save(Inventory, user2UserInventory1);
|
||||||
|
|
||||||
let giveUserInventory2 = await Inventory.FetchOneByCardNumberAndUserId(receiveUserId, giveCardNumber);
|
let user1UserInventory2 = await Inventory.FetchOneByCardNumberAndUserId(user1UserId, user2CardNumber);
|
||||||
let receiveUserInventory2 = await Inventory.FetchOneByCardNumberAndUserId(giveUserId, receiveCardNumber);
|
let user2UserInventory2 = await Inventory.FetchOneByCardNumberAndUserId(user2UserId, user1CardNumber);
|
||||||
|
|
||||||
if (!giveUserInventory2) {
|
if (!user1UserInventory2) {
|
||||||
giveUserInventory2 = new Inventory(receiveUserId, giveCardNumber, 1);
|
user1UserInventory2 = new Inventory(user1UserId, user1CardNumber, 1);
|
||||||
} else {
|
} else {
|
||||||
giveUserInventory2.SetQuantity(giveUserInventory2.Quantity + 1);
|
user1UserInventory2.SetQuantity(user1UserInventory2.Quantity + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!receiveUserInventory2) {
|
if (!user2UserInventory2) {
|
||||||
receiveUserInventory2 = new Inventory(giveUserId, receiveCardNumber, 1);
|
user2UserInventory2 = new Inventory(user2UserId, user2CardNumber, 1);
|
||||||
} else {
|
} else {
|
||||||
receiveUserInventory2.SetQuantity(receiveUserInventory2.Quantity + 1);
|
user2UserInventory2.SetQuantity(user2UserInventory2.Quantity + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
await giveUserInventory2.Save(Inventory, giveUserInventory2);
|
await user1UserInventory2.Save(Inventory, user1UserInventory2);
|
||||||
await receiveUserInventory2.Save(Inventory, receiveUserInventory2);
|
await user2UserInventory2.Save(Inventory, user2UserInventory2);
|
||||||
|
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
|
|
||||||
const tradeEmbed = new EmbedBuilder()
|
const tradeEmbed = new EmbedBuilder()
|
||||||
.setTitle("Trade Accepted")
|
.setTitle("Trade Accepted")
|
||||||
.setDescription(`Trade initiated between ${receiveUser.username} and ${giveUser.username}`)
|
.setDescription(`Trade initiated between ${user1User.username} and ${user2User.username}`)
|
||||||
.setColor(EmbedColours.Success)
|
.setColor(EmbedColours.Success)
|
||||||
.setImage("https://i.imgur.com/9w5f1ls.gif")
|
.setImage("https://i.imgur.com/9w5f1ls.gif")
|
||||||
.addFields([
|
.addFields([
|
||||||
{
|
{
|
||||||
name: "I receieve",
|
name: `${user1User.username} Receives`,
|
||||||
value: `${receiveItem.id}: ${receiveItem.name}`,
|
value: `${user2Item.id}: ${user2Item.name}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "You receieve",
|
name: `${user2User.username} Receives`,
|
||||||
value: `${giveItem.id}: ${giveItem.name}`,
|
value: `${user1Item.id}: ${user1Item.name}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -138,32 +138,32 @@ export default class Trade extends ButtonEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async DeclineTrade(interaction: ButtonInteraction) {
|
private async DeclineTrade(interaction: ButtonInteraction) {
|
||||||
const giveUserId = interaction.customId.split(" ")[2];
|
const user1UserId = interaction.customId.split(" ")[2];
|
||||||
const receiveUserId = interaction.customId.split(" ")[3];
|
const user2UserId = interaction.customId.split(" ")[3];
|
||||||
const giveCardNumber = interaction.customId.split(" ")[4];
|
const user1CardNumber = interaction.customId.split(" ")[4];
|
||||||
const receiveCardNumber = interaction.customId.split(" ")[5];
|
const user2CardNumber = interaction.customId.split(" ")[5];
|
||||||
// No need to get expiry date
|
// No need to get expiry date
|
||||||
const timeoutId = interaction.customId.split(" ")[7];
|
const timeoutId = interaction.customId.split(" ")[7];
|
||||||
|
|
||||||
AppLogger.LogSilly("Button/Trade/DeclineTrade", `Parameters: giveUserId=${giveUserId}, receiveUserId=${receiveUserId}, giveCardNumber=${giveCardNumber}, receiveCardNumber=${receiveCardNumber}, timeoutId=${timeoutId}`);
|
AppLogger.LogSilly("Button/Trade/DeclineTrade", `Parameters: user1UserId=${user1UserId}, user2UserId=${user2UserId}, user1CardNumber=${user1CardNumber}, user2CardNumber=${user2CardNumber}, timeoutId=${timeoutId}`);
|
||||||
|
|
||||||
if (interaction.user.id != receiveUserId && interaction.user.id !==giveUserId) {
|
if (interaction.user.id != user1UserId && interaction.user.id !== user2UserId) {
|
||||||
await interaction.reply("You are not the user who the trade is intended for");
|
await interaction.reply("You are not the user who the trade is intended for");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const giveUser = interaction.client.users.cache.get(giveUserId) || await interaction.client.users.fetch(giveUserId);
|
const user1User = interaction.client.users.cache.get(user1UserId) || await interaction.client.users.fetch(user1UserId);
|
||||||
const receiveUser = interaction.client.users.cache.get(receiveUserId) || await interaction.client.users.fetch(receiveUserId);
|
const user2User = interaction.client.users.cache.get(user2UserId) || await interaction.client.users.fetch(user2UserId);
|
||||||
|
|
||||||
const giveItem = CoreClient.Cards
|
const user1Item = CoreClient.Cards
|
||||||
.flatMap(x => x.cards)
|
.flatMap(x => x.cards)
|
||||||
.find(x => x.id === giveCardNumber);
|
.find(x => x.id === user1CardNumber);
|
||||||
|
|
||||||
const receiveItem = CoreClient.Cards
|
const user2Item = CoreClient.Cards
|
||||||
.flatMap(x => x.cards)
|
.flatMap(x => x.cards)
|
||||||
.find(x => x.id === receiveCardNumber);
|
.find(x => x.id === user2CardNumber);
|
||||||
|
|
||||||
if (!giveItem || !receiveItem) {
|
if (!user1Item || !user2Item) {
|
||||||
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -172,18 +172,18 @@ export default class Trade extends ButtonEvent {
|
||||||
|
|
||||||
const tradeEmbed = new EmbedBuilder()
|
const tradeEmbed = new EmbedBuilder()
|
||||||
.setTitle("Trade Declined")
|
.setTitle("Trade Declined")
|
||||||
.setDescription(`Trade initiated between ${receiveUser.username} and ${giveUser.username}`)
|
.setDescription(`Trade initiated between ${user1User.username} and ${user2User.username}`)
|
||||||
.setColor(EmbedColours.Error)
|
.setColor(EmbedColours.Error)
|
||||||
.setImage("https://i.imgur.com/9w5f1ls.gif")
|
.setImage("https://i.imgur.com/9w5f1ls.gif")
|
||||||
.addFields([
|
.addFields([
|
||||||
{
|
{
|
||||||
name: "I Receive",
|
name: `${user1User.username} Receives`,
|
||||||
value: `${receiveItem.id}: ${receiveItem.name}`,
|
value: `${user2Item.id}: ${user2Item.name}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "You Receive",
|
name: `${user2User.username} Receives`,
|
||||||
value: `${giveItem.id}: ${giveItem.name}`,
|
value: `${user1Item.id}: ${user1Item.name}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,11 +2,14 @@ import { Interaction } from "discord.js";
|
||||||
import ChatInputCommand from "./interactionCreate/ChatInputCommand";
|
import ChatInputCommand from "./interactionCreate/ChatInputCommand";
|
||||||
import Button from "./interactionCreate/Button";
|
import Button from "./interactionCreate/Button";
|
||||||
import AppLogger from "./appLogger";
|
import AppLogger from "./appLogger";
|
||||||
|
import NewUserDiscovery from "./interactionCreate/middleware/NewUserDiscovery";
|
||||||
|
|
||||||
export class Events {
|
export class Events {
|
||||||
public async onInteractionCreate(interaction: Interaction) {
|
public async onInteractionCreate(interaction: Interaction) {
|
||||||
if (!interaction.guildId) return;
|
if (!interaction.guildId) return;
|
||||||
|
|
||||||
|
await NewUserDiscovery(interaction);
|
||||||
|
|
||||||
if (interaction.isChatInputCommand()) {
|
if (interaction.isChatInputCommand()) {
|
||||||
AppLogger.LogVerbose("Client", `ChatInputCommand: ${interaction.commandName}`);
|
AppLogger.LogVerbose("Client", `ChatInputCommand: ${interaction.commandName}`);
|
||||||
ChatInputCommand.onChatInput(interaction);
|
ChatInputCommand.onChatInput(interaction);
|
||||||
|
|
15
src/client/interactionCreate/middleware/NewUserDiscovery.ts
Normal file
15
src/client/interactionCreate/middleware/NewUserDiscovery.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { Interaction } from "discord.js";
|
||||||
|
import User from "../../../database/entities/app/User";
|
||||||
|
import CardConstants from "../../../constants/CardConstants";
|
||||||
|
import AppLogger from "../../appLogger";
|
||||||
|
|
||||||
|
export default async function NewUserDiscovery(interaction: Interaction) {
|
||||||
|
const existingUser = await User.FetchOneById(User, interaction.user.id);
|
||||||
|
|
||||||
|
if (existingUser) return;
|
||||||
|
|
||||||
|
const newUser = new User(interaction.user.id, CardConstants.StartingCurrency);
|
||||||
|
await newUser.Save(User, newUser);
|
||||||
|
|
||||||
|
AppLogger.LogInfo("NewUserDiscovery", `Discovered new user ${interaction.user.id}`);
|
||||||
|
}
|
|
@ -8,14 +8,14 @@ export default class Balance extends Command {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.CommandBuilder = new SlashCommandBuilder()
|
this.CommandBuilder = new SlashCommandBuilder()
|
||||||
.setName("balance")
|
.setName("balance")
|
||||||
.setDescription("Get your currency balance");
|
.setDescription("Get your currency balance");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async execute(interaction: CommandInteraction) {
|
public override async execute(interaction: CommandInteraction) {
|
||||||
const user = await User.FetchOneById(User, interaction.user.id);
|
const user = await User.FetchOneById(User, interaction.user.id);
|
||||||
|
|
||||||
let userBalance = user != null ? user.Currency : 0;
|
const userBalance = user != null ? user.Currency : 0;
|
||||||
|
|
||||||
const embed = new EmbedBuilder()
|
const embed = new EmbedBuilder()
|
||||||
.setColor(EmbedColours.Ok)
|
.setColor(EmbedColours.Ok)
|
||||||
|
|
|
@ -8,6 +8,8 @@ import Config from "../database/entities/app/Config";
|
||||||
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import AppLogger from "../client/appLogger";
|
import AppLogger from "../client/appLogger";
|
||||||
|
import User from "../database/entities/app/User";
|
||||||
|
import CardConstants from "../constants/CardConstants";
|
||||||
|
|
||||||
export default class Drop extends Command {
|
export default class Drop extends Command {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -31,6 +33,20 @@ export default class Drop extends Command {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let user = await User.FetchOneById(User, interaction.user.id);
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
user = new User(interaction.user.id, CardConstants.StartingCurrency);
|
||||||
|
await user.Save(User, user);
|
||||||
|
|
||||||
|
AppLogger.LogInfo("Commands/Drop", `New user (${interaction.user.id}) saved to the database`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.Currency < CardConstants.ClaimCost) {
|
||||||
|
await interaction.reply(`Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const randomCard = CardDropHelperMetadata.GetRandomCard();
|
const randomCard = CardDropHelperMetadata.GetRandomCard();
|
||||||
|
|
||||||
if (!randomCard) {
|
if (!randomCard) {
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default class Give extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
const cardNumber = interaction.options.get("cardnumber", true);
|
const cardNumber = interaction.options.get("cardnumber", true);
|
||||||
const user = interaction.options.getUser("user", true);
|
const user = interaction.options.get("user", true).user!;
|
||||||
|
|
||||||
AppLogger.LogSilly("Commands/Give/GiveCard", `Parameters: cardNumber=${cardNumber.value}, user=${user.id}`);
|
AppLogger.LogSilly("Commands/Give/GiveCard", `Parameters: cardNumber=${cardNumber.value}, user=${user.id}`);
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ export default class Give extends Command {
|
||||||
|
|
||||||
private async GiveCurrency(interaction: CommandInteraction) {
|
private async GiveCurrency(interaction: CommandInteraction) {
|
||||||
const amount = interaction.options.get("amount", true);
|
const amount = interaction.options.get("amount", true);
|
||||||
const user = interaction.options.getUser("user", true);
|
const user = interaction.options.get("user", true).user!;
|
||||||
|
|
||||||
AppLogger.LogSilly("Commands/Give/GiveCurrency", `Parameters: amount=${amount.value} user=${user.id}`);
|
AppLogger.LogSilly("Commands/Give/GiveCurrency", `Parameters: amount=${amount.value} user=${user.id}`);
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,9 @@ export default class Inventory extends Command {
|
||||||
|
|
||||||
public override async execute(interaction: CommandInteraction) {
|
public override async execute(interaction: CommandInteraction) {
|
||||||
const page = interaction.options.get("page");
|
const page = interaction.options.get("page");
|
||||||
const user = interaction.options.getUser("user") || interaction.user;
|
const userOption = interaction.options.get("user");
|
||||||
|
|
||||||
|
const user = userOption ? userOption.user! : interaction.user;
|
||||||
|
|
||||||
AppLogger.LogSilly("Commands/Inventory", `Parameters: page=${page?.value}, user=${user.id}`);
|
AppLogger.LogSilly("Commands/Inventory", `Parameters: page=${page?.value}, user=${user.id}`);
|
||||||
|
|
||||||
|
|
|
@ -30,34 +30,39 @@ export default class Trade extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async execute(interaction: CommandInteraction) {
|
public override async execute(interaction: CommandInteraction) {
|
||||||
const user = interaction.options.getUser("user")!;
|
const user = interaction.options.get("user", true).user!;
|
||||||
const give = interaction.options.get("give")!;
|
const give = interaction.options.get("give", true);
|
||||||
const receive = interaction.options.get("receive")!;
|
const receive = interaction.options.get("receive", true);
|
||||||
|
|
||||||
AppLogger.LogSilly("Commands/Trade", `Parameters: user=${user.id}, give=${give.value}, receive=${receive.value}`);
|
AppLogger.LogSilly("Commands/Trade", `Parameters: user=${user.id}, give=${give.value}, receive=${receive.value}`);
|
||||||
|
|
||||||
const giveItemEntity = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, give.value!.toString());
|
if (interaction.user.id == user.id) {
|
||||||
const receiveItemEntity = await Inventory.FetchOneByCardNumberAndUserId(user.id, receive.value!.toString());
|
await interaction.reply("You can not create a trade with yourself.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!giveItemEntity) {
|
const user1ItemEntity = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, give.value!.toString());
|
||||||
|
const user2ItemEntity = await Inventory.FetchOneByCardNumberAndUserId(user.id, receive.value!.toString());
|
||||||
|
|
||||||
|
if (!user1ItemEntity) {
|
||||||
await interaction.reply("You do not have the item you are trying to trade.");
|
await interaction.reply("You do not have the item you are trying to trade.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!receiveItemEntity) {
|
if (!user2ItemEntity) {
|
||||||
await interaction.reply("The user you are trying to trade with does not have the item you are trying to trade for.");
|
await interaction.reply("The user you are trying to trade with does not have the item you are trying to trade for.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const giveItem = CoreClient.Cards
|
const user1Item = CoreClient.Cards
|
||||||
.flatMap(x => x.cards)
|
.flatMap(x => x.cards)
|
||||||
.find(x => x.id === give.value!.toString());
|
.find(x => x.id === give.value!.toString());
|
||||||
|
|
||||||
const receiveItem = CoreClient.Cards
|
const user2Item = CoreClient.Cards
|
||||||
.flatMap(x => x.cards)
|
.flatMap(x => x.cards)
|
||||||
.find(x => x.id === receive.value!.toString());
|
.find(x => x.id === receive.value!.toString());
|
||||||
|
|
||||||
if (!giveItem || !receiveItem) {
|
if (!user1Item || !user2Item) {
|
||||||
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
await interaction.reply("One or more of the items you are trying to trade does not exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -72,13 +77,13 @@ export default class Trade extends Command {
|
||||||
.setImage("https://media1.tenor.com/m/KkZwKl2AQ2QAAAAd/trade-offer.gif")
|
.setImage("https://media1.tenor.com/m/KkZwKl2AQ2QAAAAd/trade-offer.gif")
|
||||||
.addFields([
|
.addFields([
|
||||||
{
|
{
|
||||||
name: "I Receive",
|
name: `${interaction.user.username} Receives`,
|
||||||
value: `${receiveItem.id}: ${receiveItem.name}`,
|
value: `${user2Item.id}: ${user2Item.name}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "You Receive",
|
name: `${user.username} Receives`,
|
||||||
value: `${giveItem.id}: ${giveItem.name}`,
|
value: `${user1Item.id}: ${user1Item.name}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -87,16 +92,16 @@ export default class Trade extends Command {
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const timeoutId = setTimeout(async () => this.autoDecline(interaction, interaction.user.username, user.username, giveItem.id, receiveItem.id, giveItem.name, receiveItem.name), 1000 * 60 * 15); // 15 minutes
|
const timeoutId = setTimeout(async () => this.autoDecline(interaction, interaction.user.username, user.username, user1Item.id, user2Item.id, user1Item.name, user2Item.name), 1000 * 60 * 15); // 15 minutes
|
||||||
|
|
||||||
const row = new ActionRowBuilder<ButtonBuilder>()
|
const row = new ActionRowBuilder<ButtonBuilder>()
|
||||||
.addComponents([
|
.addComponents([
|
||||||
new ButtonBuilder()
|
new ButtonBuilder()
|
||||||
.setCustomId(`trade accept ${interaction.user.id} ${user.id} ${giveItem.id} ${receiveItem.id} ${expiry} ${timeoutId}`)
|
.setCustomId(`trade accept ${interaction.user.id} ${user.id} ${user1Item.id} ${user2Item.id} ${expiry} ${timeoutId}`)
|
||||||
.setLabel("Accept")
|
.setLabel("Accept")
|
||||||
.setStyle(ButtonStyle.Success),
|
.setStyle(ButtonStyle.Success),
|
||||||
new ButtonBuilder()
|
new ButtonBuilder()
|
||||||
.setCustomId(`trade decline ${interaction.user.id} ${user.id} ${giveItem.id} ${receiveItem.id} ${expiry} ${timeoutId}`)
|
.setCustomId(`trade decline ${interaction.user.id} ${user.id} ${user1Item.id} ${user2Item.id} ${expiry} ${timeoutId}`)
|
||||||
.setLabel("Decline")
|
.setLabel("Decline")
|
||||||
.setStyle(ButtonStyle.Danger),
|
.setStyle(ButtonStyle.Danger),
|
||||||
]);
|
]);
|
||||||
|
@ -104,23 +109,23 @@ export default class Trade extends Command {
|
||||||
await interaction.reply({ content: `${user}`, embeds: [ tradeEmbed ], components: [ row ] });
|
await interaction.reply({ content: `${user}`, embeds: [ tradeEmbed ], components: [ row ] });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async autoDecline(interaction: CommandInteraction, giveUsername: string, receiveUsername: string, giveCardNumber: string, receiveCardNumber: string, giveCardName: string, receiveCardName: string) {
|
private async autoDecline(interaction: CommandInteraction, user1Username: string, user2Username: string, user1CardNumber: string, user2CardNumber: string, user1CardName: string, user2CardName: string) {
|
||||||
AppLogger.LogSilly("Commands/Trade/AutoDecline", `Auto declining trade between ${giveUsername} and ${receiveUsername}`);
|
AppLogger.LogSilly("Commands/Trade/AutoDecline", `Auto declining trade between ${user1Username} and ${user2Username}`);
|
||||||
|
|
||||||
const tradeEmbed = new EmbedBuilder()
|
const tradeEmbed = new EmbedBuilder()
|
||||||
.setTitle("Trade Expired")
|
.setTitle("Trade Expired")
|
||||||
.setDescription(`Trade initiated between ${receiveUsername} and ${giveUsername}`)
|
.setDescription(`Trade initiated between ${user1Username} and ${user2Username}`)
|
||||||
.setColor(EmbedColours.Error)
|
.setColor(EmbedColours.Error)
|
||||||
.setImage("https://media1.tenor.com/m/KkZwKl2AQ2QAAAAd/trade-offer.gif")
|
.setImage("https://media1.tenor.com/m/KkZwKl2AQ2QAAAAd/trade-offer.gif")
|
||||||
.addFields([
|
.addFields([
|
||||||
{
|
{
|
||||||
name: "I Receive",
|
name: `${user1Username} Receives`,
|
||||||
value: `${receiveCardNumber}: ${receiveCardName}`,
|
value: `${user2CardNumber}: ${user2CardName}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "You Receive",
|
name: `${user2Username} Receives`,
|
||||||
value: `${giveCardNumber}: ${giveCardName}`,
|
value: `${user1CardNumber}: ${user1CardName}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,11 +65,11 @@ export function GetSacrificeAmount(rarity: CardRarity): number {
|
||||||
case CardRarity.Bronze:
|
case CardRarity.Bronze:
|
||||||
return 5;
|
return 5;
|
||||||
case CardRarity.Silver:
|
case CardRarity.Silver:
|
||||||
return 15;
|
return 10;
|
||||||
case CardRarity.Gold:
|
case CardRarity.Gold:
|
||||||
return 30;
|
return 30;
|
||||||
case CardRarity.Manga:
|
case CardRarity.Manga:
|
||||||
return 50;
|
return 40;
|
||||||
case CardRarity.Legendary:
|
case CardRarity.Legendary:
|
||||||
return 100;
|
return 100;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -3,15 +3,17 @@ import CardConstants from "../constants/CardConstants";
|
||||||
import User from "../database/entities/app/User";
|
import User from "../database/entities/app/User";
|
||||||
|
|
||||||
export default async function GiveCurrency() {
|
export default async function GiveCurrency() {
|
||||||
AppLogger.LogInfo("Timers/GiveCurrency", "Giving currency to every known user");
|
AppLogger.LogDebug("Timers/GiveCurrency", "Giving currency to every known user");
|
||||||
|
|
||||||
const users = await User.FetchAll(User);
|
const users = await User.FetchAll(User);
|
||||||
|
|
||||||
for (const user of users) {
|
const usersFiltered = users.filter(x => x.Currency < 1000);
|
||||||
|
|
||||||
|
for (const user of usersFiltered) {
|
||||||
user.AddCurrency(CardConstants.TimerGiveAmount);
|
user.AddCurrency(CardConstants.TimerGiveAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
User.SaveAll(User, users);
|
User.SaveAll(User, users);
|
||||||
|
|
||||||
AppLogger.LogInfo("Timers/GiveCurrency", `Successfully gave +${CardConstants.TimerGiveAmount} currency to ${users.length} users`);
|
AppLogger.LogDebug("Timers/GiveCurrency", `Successfully gave +${CardConstants.TimerGiveAmount} currency to ${usersFiltered.length} users`);
|
||||||
}
|
}
|
Loading…
Reference in a new issue