1
0
mirror of https://github.com/toast-ts/Daggerbot-TS.git synced 2024-11-17 16:30:58 -05:00

Compare commits

...

4 Commits

Author SHA1 Message Date
toast-ts
7c40fdb83a Update Postgres to 16.3 2024-05-16 09:26:12 +10:00
toast-ts
c9ae5226e9 Consolidate the function into mp.ts 2024-05-16 09:22:34 +10:00
toast-ts
76a1cc52e9 Update linkMapping 2024-05-16 09:11:46 +10:00
toast-ts
4a6b89e634 Update dependencies 2024-05-16 08:46:38 +10:00
7 changed files with 30 additions and 31 deletions

View File

@ -7,7 +7,7 @@ services:
- 6379:6379/tcp - 6379:6379/tcp
db: db:
container_name: daggerbot-postgres container_name: daggerbot-postgres
image: postgres:16.2-alpine3.19 image: postgres:16.3-alpine3.19
restart: unless-stopped restart: unless-stopped
ports: ports:
- 5432:5432/tcp - 5432:5432/tcp

View File

@ -41,12 +41,12 @@
"node-cron": "3.0.3", "node-cron": "3.0.3",
"redis": "4.6.13", "redis": "4.6.13",
"simple-git": "3.24.0", "simple-git": "3.24.0",
"systeminformation": "5.22.8", "systeminformation": "5.22.9",
"undici": "6.16.1" "undici": "6.16.1"
}, },
"devDependencies": { "devDependencies": {
"@types/ms": "0.7.34", "@types/ms": "0.7.34",
"@types/node": "20.12.11", "@types/node": "20.12.12",
"@types/node-cron": "3.0.11", "@types/node-cron": "3.0.11",
"typescript": "5.4.5" "typescript": "5.4.5"
} }

View File

@ -5,10 +5,10 @@ export default class FAQ {
static run(_client: TClient, interaction: Discord.ChatInputCommandInteraction<'cached'>){ static run(_client: TClient, interaction: Discord.ChatInputCommandInteraction<'cached'>){
({ ({
srp: ()=>FAQHelper.reply(interaction, null, `[Ballyspring](<${FAQHelper.linkMapping.ballyspring}>) is the map that is used in Survival Roleplay S4.\n\n> __Note__\n> The map won't look closely like the one in SRP as it is privately edited version of the public map.`, null, false), srp: ()=>FAQHelper.reply(interaction, null, `[Ballyspring](<${FAQHelper.linkMapping.ballyspring}>) is the map that is used in Survival Roleplay S4.\n\n> __Note__\n> The map won't look closely like the one in SRP as it is privately edited version of the public map.`, null, false),
vtcR: ()=>interaction.reply(FAQHelper.youCanGetRole('vtcmember', 'truck')+'\n*VTC skin can also be found in <#801975222609641472> as well.*'), vtcR: ()=>interaction.reply(FAQHelper.youCanGetRole('vtcmember', 'truck')+`\n*VTC skin can also be found in the [VTC announcements channel](<${FAQHelper.linkMapping.vtcPaintjob}>).*`),
mpR: ()=>interaction.reply(FAQHelper.youCanGetRole('mpplayer', 'tractor')), mpR: ()=>interaction.reply(FAQHelper.youCanGetRole('mpplayer', 'tractor')),
ytscam: ()=>FAQHelper.reply(interaction, 'Scammers in YouTube comments section', 'If you ever see a comment mentioning a giveaway or anything else, **it\'s a scam!**\nYou should report it to YouTube and move on or ignore it.\nP.S: They\'re on every channel and not just Daggerwin.', FAQHelper.CDN('YTScam'), true), ytscam: ()=>FAQHelper.reply(interaction, 'Scammers in YouTube comments section', 'If you ever see a comment mentioning a giveaway or anything else, **it\'s a scam!**\nYou should report it to YouTube and move on or ignore it.\nP.S: They\'re on every channel and not just Daggerwin.', FAQHelper.CDN('YTScam'), true),
steamscam: ()=>FAQHelper.reply(interaction, 'Steam account report scam', `If you received a DM about this, please report it to Discord Moderators or open a [ticket](${FAQHelper.linkMapping.staffTicket})`, FAQHelper.CDN('SteamScam'), true), steamscam: ()=>FAQHelper.reply(interaction, 'Steam account report scam', `If you received a DM about this, please report it to Discord Moderators or open a [ticket](${FAQHelper.linkMapping.discordModTicket})`, FAQHelper.CDN('SteamScam'), true),
fsVerifyGame: ()=>FAQHelper.reply(interaction, 'Verifying your game files', `You can verify your game files if you experience any issues with your game.\n${FAQHelper.verifyGameFiles}`, FAQHelper.CDN('Steam-Epic-VerifyGamesLocation'), true), fsVerifyGame: ()=>FAQHelper.reply(interaction, 'Verifying your game files', `You can verify your game files if you experience any issues with your game.\n${FAQHelper.verifyGameFiles}`, FAQHelper.CDN('Steam-Epic-VerifyGamesLocation'), true),
fsShader: ()=>FAQHelper.reply(interaction, 'Clearing your shader cache folder', 'If your game keeps crashing shortly after opening your game, then the shaders might be an issue.\nTo resolve this, you can go to `Documents/My Games/FarmingSimulator2022` and delete the folder called `shader_cache`', FAQHelper.CDN('shader_cache-Location'), true), fsShader: ()=>FAQHelper.reply(interaction, 'Clearing your shader cache folder', 'If your game keeps crashing shortly after opening your game, then the shaders might be an issue.\nTo resolve this, you can go to `Documents/My Games/FarmingSimulator2022` and delete the folder called `shader_cache`', FAQHelper.CDN('shader_cache-Location'), true),
fsLogfile: ()=>FAQHelper.reply(interaction, 'Uploading your log file', 'You can find `log.txt` in `Documents/My Games/FarmingSimulator2022` and upload it into <#596989522395398144> along with your issue, so people can assist you further and help you resolve.', FAQHelper.CDN('log_txt-Location'), true), fsLogfile: ()=>FAQHelper.reply(interaction, 'Uploading your log file', 'You can find `log.txt` in `Documents/My Games/FarmingSimulator2022` and upload it into <#596989522395398144> along with your issue, so people can assist you further and help you resolve.', FAQHelper.CDN('log_txt-Location'), true),

View File

@ -5,7 +5,6 @@ import Logger from '../helpers/Logger.js';
import CanvasBuilder from '../components/CanvasBuilder.js'; import CanvasBuilder from '../components/CanvasBuilder.js';
import RanIntoHumor from '../helpers/RanIntoHumor.js'; import RanIntoHumor from '../helpers/RanIntoHumor.js';
import MessageTool from '../helpers/MessageTool.js'; import MessageTool from '../helpers/MessageTool.js';
import PalletLibrary from '../helpers/PalletLibrary.js';
import {FSData} from 'src/interfaces'; import {FSData} from 'src/interfaces';
import {requestServerData, mpModuleDisabled, refreshTimerSecs, playtimeStat, MPChannels} from '../modules/MPModule.js'; import {requestServerData, mpModuleDisabled, refreshTimerSecs, playtimeStat, MPChannels} from '../modules/MPModule.js';
@ -23,6 +22,7 @@ async function fetchData(client:TClient, interaction:Discord.ChatInputCommandInt
const logPrefix = 'MPDB'; const logPrefix = 'MPDB';
const MAP_POOL_HOOKMSG = '1141293129673232435'; const MAP_POOL_HOOKMSG = '1141293129673232435';
const PALLET_FILTER = ['PALLETS', 'BIGBAGPALLETS'];
export default class MP { export default class MP {
static async autocomplete(client:TClient, interaction:Discord.AutocompleteInteraction<'cached'>) { static async autocomplete(client:TClient, interaction:Discord.AutocompleteInteraction<'cached'>) {
@ -103,7 +103,7 @@ export default class MP {
pallets: async()=>{ pallets: async()=>{
const DSS = await fetchData(client, interaction, choiceSelector) as FSData; const DSS = await fetchData(client, interaction, choiceSelector) as FSData;
if (!DSS) return console.log('Endpoint failed - pallets'); if (!DSS) return console.log('Endpoint failed - pallets');
const filter = DSS?.vehicles.filter(x=>['PALLETS', 'BIGBAGPALLETS'].includes(x.category)); const filter = DSS?.vehicles.filter(x=>PALLET_FILTER.includes(x.category));
const rules = { const rules = {
one: 'single pallet', one: 'single pallet',
two: 'pallets', two: 'pallets',
@ -112,10 +112,10 @@ export default class MP {
}[new Intl.PluralRules('en', {type: 'ordinal'}).select(filter.length)]; }[new Intl.PluralRules('en', {type: 'ordinal'}).select(filter.length)];
if (filter.length < 1) return interaction.editReply('No pallets found on the server.'); if (filter.length < 1) return interaction.editReply('No pallets found on the server.');
else { else {
const getLongestName = Object.entries(PalletLibrary(DSS)).map(([name, _])=>name.length).sort((a,b)=>b-a)[0]; const getLongestName = Object.entries(this.getPalletCounts(DSS)).map(([name, _])=>name.length).sort((a,b)=>b-a)[0];
await interaction.editReply(MessageTool.concatMessage( await interaction.editReply(MessageTool.concatMessage(
`There are currently **${filter.length}** ${rules} on the server. Here\'s the breakdown:\`\`\`ansi`, `There are currently **${filter.length}** ${rules} on the server. Here\'s the breakdown:\`\`\`ansi`,
Object.entries(PalletLibrary(DSS)).map(([name, count])=>`${ansi.blue(name.padEnd(getLongestName+3))}${ansi.yellow(count.toString())}`).join('\n'), Object.entries(this.getPalletCounts(DSS)).map(([name, count])=>`${ansi.blue(name.padEnd(getLongestName+3))}${ansi.yellow(count.toString())}`).join('\n'),
'```' '```'
)) ))
} }
@ -230,6 +230,14 @@ export default class MP {
const numbersArr = ['1⃣','2⃣','3⃣','4⃣','5⃣','6⃣','7⃣','8⃣','9⃣','🔟']; const numbersArr = ['1⃣','2⃣','3⃣','4⃣','5⃣','6⃣','7⃣','8⃣','9⃣','🔟'];
await Promise.all(numbersArr.slice(0, length).map(emote=>message.react(emote))); await Promise.all(numbersArr.slice(0, length).map(emote=>message.react(emote)));
} }
private static getPalletCounts(data:FSData) {
const pallets = data.vehicles.filter(x=>PALLET_FILTER.includes(x.category));
const counts = pallets.reduce((acc, name)=>{
acc[name.name] = (acc[name.name] ?? 0) + 1;
return acc;
}, {} as {[key:string]:number});
return counts;
}
static data = new Discord.SlashCommandBuilder() static data = new Discord.SlashCommandBuilder()
.setName('mp') .setName('mp')
.setDescription('Get information from the FSMP server(s)') .setDescription('Get information from the FSMP server(s)')

View File

@ -10,7 +10,7 @@ export default class FAQHelper {
else return interaction.reply(message).catch(err=>interaction.reply(this.errorMsg+'\n'+err)) else return interaction.reply(message).catch(err=>interaction.reply(this.errorMsg+'\n'+err))
} }
public static CDN=(filename:string)=>'https://cdn.toast-server.net/daggerwin/'+filename+'.png'; public static CDN=(filename:string)=>'https://cdn.toast-server.net/daggerwin/'+filename+'.png';
public static youCanGetRole=(role:string, roleEmoji:string)=>`You can get the ${MessageTool.formatMention(config.dcServer.roles[role], 'role')} role from <#802283932430106624> by clicking :${roleEmoji}: button on a webhook's message.`; public static youCanGetRole=(role:string, roleEmoji:string)=>`You can get the ${MessageTool.formatMention(config.dcServer.roles[role], 'role')} role from <#802283932430106624> by clicking :${roleEmoji}: on a webhook's message.`;
public static readonly verifyGameFiles = this.ansiCodeblock( public static readonly verifyGameFiles = this.ansiCodeblock(
'Steam (Top panel)', 'Steam (Top panel)',
'1. Go to your game library and right click on Farming Simulator 22', '1. Go to your game library and right click on Farming Simulator 22',
@ -25,6 +25,7 @@ export default class FAQHelper {
) )
public static readonly linkMapping = { public static readonly linkMapping = {
ballyspring: 'https://www.farming-simulator.com/mod.php?mod_id=270745', ballyspring: 'https://www.farming-simulator.com/mod.php?mod_id=270745',
staffTicket: 'https://discord.com/channels/468835415093411861/942173932339986472/1054129985788596385', discordModTicket: 'https://discord.com/channels/468835415093411861/942173932339986472/1054129985788596385',
vtcPaintjob: 'https://discord.com/channels/468835415093411861/801975222609641472/1165673285460164739'
} }
} }

View File

@ -1,10 +0,0 @@
import {FSData} from 'src/interfaces';
export default function(data:FSData) {
const pallets = data.vehicles.filter(x=>['PALLETS', 'BIGBAGPALLETS'].includes(x.category));
const counts = pallets.reduce((acc, name)=>{
acc[name.name] = (acc[name.name] ?? 0) + 1;
return acc;
}, {} as {[key:string]:number});
return counts;
}

View File

@ -533,12 +533,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:*, @types/node@npm:20.12.11": "@types/node@npm:*, @types/node@npm:20.12.12":
version: 20.12.11 version: 20.12.12
resolution: "@types/node@npm:20.12.11" resolution: "@types/node@npm:20.12.12"
dependencies: dependencies:
undici-types: "npm:~5.26.4" undici-types: "npm:~5.26.4"
checksum: 10/c6afe7c2c4504a4f488814d7b306ebad16bf42cbb43bf9db9fe1aed8c5fb99235593c3be5088979a64526b106cf022256688e2f002811be8273d87dc2e0d484f checksum: 10/e3945da0a3017bdc1f88f15bdfb823f526b2a717bd58d4640082d6eb0bd2794b5c99bfb914b9e9324ec116dce36066990353ed1c777e8a7b0641f772575793c4
languageName: node languageName: node
linkType: hard linkType: hard
@ -665,7 +665,7 @@ __metadata:
"@sequelize/postgres": "npm:7.0.0-alpha.40" "@sequelize/postgres": "npm:7.0.0-alpha.40"
"@toast/tokenservice-client": "npm:1.2.8" "@toast/tokenservice-client": "npm:1.2.8"
"@types/ms": "npm:0.7.34" "@types/ms": "npm:0.7.34"
"@types/node": "npm:20.12.11" "@types/node": "npm:20.12.12"
"@types/node-cron": "npm:3.0.11" "@types/node-cron": "npm:3.0.11"
ansi-colors: "npm:4.1.3" ansi-colors: "npm:4.1.3"
dayjs: "npm:1.11.11" dayjs: "npm:1.11.11"
@ -676,7 +676,7 @@ __metadata:
node-cron: "npm:3.0.3" node-cron: "npm:3.0.3"
redis: "npm:4.6.13" redis: "npm:4.6.13"
simple-git: "npm:3.24.0" simple-git: "npm:3.24.0"
systeminformation: "npm:5.22.8" systeminformation: "npm:5.22.9"
typescript: "npm:5.4.5" typescript: "npm:5.4.5"
undici: "npm:6.16.1" undici: "npm:6.16.1"
languageName: unknown languageName: unknown
@ -1262,12 +1262,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"systeminformation@npm:5.22.8": "systeminformation@npm:5.22.9":
version: 5.22.8 version: 5.22.9
resolution: "systeminformation@npm:5.22.8" resolution: "systeminformation@npm:5.22.9"
bin: bin:
systeminformation: lib/cli.js systeminformation: lib/cli.js
checksum: 10/d24d63015913d3358f6690f5881c7f3140397a3ffca0e05b41e94e8da6d5233046064ac0853f32272ca6ac246eeb51d5f9b8617cbd7c342f8cca1489e3fe7b60 checksum: 10/c2006c817a362f309f058a4a1765e857d7986daa60260fe8f9574a3587a37c9b31aa3c5977a37f5a22b90acefc254eecf3e47ac4bd629072b4576fa171e13eac
conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android)
languageName: node languageName: node
linkType: hard linkType: hard