diff --git a/.dev.env b/.dev.env index 14e8d2c..8b1bbfc 100644 --- a/.dev.env +++ b/.dev.env @@ -15,6 +15,8 @@ BOT_CLIENTID=682942374040961060 ABOUT_FUNDING= ABOUT_REPO= +DROP_RARITY=-1 + DB_HOST=127.0.0.1 DB_PORT=3301 DB_NAME=carddrop diff --git a/.prod.env b/.prod.env index d351e88..4a0f69f 100644 --- a/.prod.env +++ b/.prod.env @@ -15,6 +15,8 @@ BOT_CLIENTID=1093810443589529631 ABOUT_FUNDING= ABOUT_REPO= +DROP_RARITY=-1 + DB_HOST=127.0.0.1 DB_PORT=3321 DB_NAME=carddrop diff --git a/.stage.env b/.stage.env index f00a3ad..cc0c28c 100644 --- a/.stage.env +++ b/.stage.env @@ -15,6 +15,8 @@ BOT_CLIENTID=1147976642942214235 ABOUT_FUNDING= ABOUT_REPO= +DROP_RARITY=-1 + DB_HOST=127.0.0.1 DB_PORT=3311 DB_NAME=carddrop diff --git a/cards.db b/cards.db new file mode 100644 index 0000000..5df7a4e Binary files /dev/null and b/cards.db differ diff --git a/src/commands/drop.ts b/src/commands/drop.ts index a8c7f50..82dbc24 100644 --- a/src/commands/drop.ts +++ b/src/commands/drop.ts @@ -16,7 +16,11 @@ export default class Drop extends Command { } public override async execute(interaction: CommandInteraction) { - const randomCard = await CardDropHelper.GetRandomCard(); + let randomCard = await CardDropHelper.GetRandomCard(); + + if (process.env.DROP_RARITY && Number(process.env.DROP_RARITY) > 0) { + randomCard = await CardDropHelper.GetRandomCardByRarity(Number(process.env.DROP_RARITY)); + } const image = readFileSync(randomCard.Path); diff --git a/src/database/entities/card/Card.ts b/src/database/entities/card/Card.ts index 8cbfbd3..3399695 100644 --- a/src/database/entities/card/Card.ts +++ b/src/database/entities/card/Card.ts @@ -2,6 +2,7 @@ import { Column, Entity, ManyToOne } from "typeorm"; import CardBaseEntity from "../../../contracts/CardBaseEntity"; import { CardRarity } from "../../../constants/CardRarity"; import Series from "./Series"; +import CardDataSource from "../../dataSources/cardDataSource"; @Entity() export default class Card extends CardBaseEntity { @@ -33,4 +34,12 @@ export default class Card extends CardBaseEntity { @ManyToOne(() => Series, x => x.Cards) Series: Series; + + public static async FetchAllByRarity(rarity: CardRarity, relations?: string[]): Promise { + const repository = CardDataSource.getRepository(Card); + + const all = await repository.find({ where: { Rarity: rarity }, relations: relations || [] }); + + return all; + } } \ No newline at end of file diff --git a/src/helpers/CardDropHelper.ts b/src/helpers/CardDropHelper.ts index ba761ed..a7d0a02 100644 --- a/src/helpers/CardDropHelper.ts +++ b/src/helpers/CardDropHelper.ts @@ -24,7 +24,7 @@ export default class CardDropHelper { else if (randomRarity < goldChance) cardRarity = CardRarity.Gold; else cardRarity = CardRarity.Legendary; - const allCards = randomSeries.Cards.filter(x => x.Rarity == cardRarity && x.Path && x.FileName && x.Rarity == CardRarity.Legendary); + const allCards = randomSeries.Cards.filter(x => x.Rarity == cardRarity && x.Path && x.FileName); const randomCardIndex = Math.floor(Math.random() * allCards.length); @@ -32,4 +32,14 @@ export default class CardDropHelper { return randomCard; } + + public static async GetRandomCardByRarity(rarity: CardRarity): Promise { + const allCards = await Card.FetchAllByRarity(rarity, [ "Series" ]); + + const randomCardIndex = Math.floor(Math.random() * allCards.length); + + const card = allCards[randomCardIndex]; + + return card; + } } \ No newline at end of file