updates to concierge bot to support adding services and routes
This commit is contained in:
126
packages/concierge-bot/src/commands/create-route.command.tsx
Normal file
126
packages/concierge-bot/src/commands/create-route.command.tsx
Normal file
@@ -0,0 +1,126 @@
|
||||
import { getDB } from '@/lib/db';
|
||||
import { Constants } from '@projectdysnomia/dysnomia';
|
||||
import {
|
||||
createChatCommand,
|
||||
integerOption,
|
||||
stringOption,
|
||||
subCommandGroupOption,
|
||||
subCommandRouter,
|
||||
type CommandContext,
|
||||
type ExecutableInteraction,
|
||||
} from '@star-kitten/lib/discord';
|
||||
import { numberOption, subCommandOption } from '@star-kitten/lib/discord';
|
||||
|
||||
export default createChatCommand(
|
||||
{
|
||||
name: 'route',
|
||||
description: 'Routes',
|
||||
defaultMemberPermissions: Constants.Permissions.administrator,
|
||||
options: [
|
||||
subCommandGroupOption({
|
||||
name: 'group',
|
||||
description: 'a group',
|
||||
options: [
|
||||
subCommandOption({
|
||||
name: 'add',
|
||||
description: 'add a route',
|
||||
options: [
|
||||
stringOption({
|
||||
name: 'start',
|
||||
description: 'starting location',
|
||||
autocomplete: true,
|
||||
required: true,
|
||||
}),
|
||||
stringOption({
|
||||
name: 'end',
|
||||
description: 'end location',
|
||||
autocomplete: true,
|
||||
required: true,
|
||||
}),
|
||||
integerOption({
|
||||
name: 'isk-per-m3',
|
||||
description: 'ISK per m3',
|
||||
required: true,
|
||||
}),
|
||||
numberOption({
|
||||
name: 'collateral-percent',
|
||||
description: 'percentage of collateral to add onto the cost.',
|
||||
required: true,
|
||||
}),
|
||||
integerOption({
|
||||
name: 'max-volume',
|
||||
description: 'Maximum volume allowed for this route',
|
||||
required: true,
|
||||
}),
|
||||
integerOption({
|
||||
name: 'min-reward',
|
||||
description: 'Minimum required reward for this route',
|
||||
required: true,
|
||||
}),
|
||||
integerOption({
|
||||
name: 'expiration',
|
||||
description: 'Expiration the client should set on the contract',
|
||||
required: true,
|
||||
}),
|
||||
integerOption({
|
||||
name: 'completion',
|
||||
description: 'Days to complete time the client should set on the contract',
|
||||
required: true,
|
||||
}),
|
||||
integerOption({
|
||||
name: 'max-collateral',
|
||||
description: 'Maximum collateral allowed for this route',
|
||||
}),
|
||||
],
|
||||
}),
|
||||
subCommandOption({
|
||||
name: 'remove',
|
||||
description: 'remove a route',
|
||||
options: [
|
||||
integerOption({
|
||||
name: 'id',
|
||||
description: 'ID of the route to remove',
|
||||
required: true,
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
},
|
||||
subCommandRouter({
|
||||
group: {
|
||||
add: async (interaction, ctx, data) => {
|
||||
console.log(`in add`);
|
||||
if (interaction.isAutocomplete()) {
|
||||
const focused = data.options?.find((opt) => opt.focused);
|
||||
console.log(`focused`, focused);
|
||||
if (focused) {
|
||||
switch (focused.name) {
|
||||
case 'start': {
|
||||
const locations = getDB().getAllLocations();
|
||||
console.log(JSON.stringify(locations.length));
|
||||
return await interaction.result(
|
||||
locations.map((l) => ({ name: l.short_name, value: String(l.location_id) })),
|
||||
);
|
||||
}
|
||||
case 'end': {
|
||||
const locations = getDB().getAllLocations();
|
||||
console.log(JSON.stringify(locations.length));
|
||||
return await interaction.result(
|
||||
locations.map((l) => ({ name: l.short_name, value: String(l.location_id) })),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
remove: (interaction, ctx) => {
|
||||
console.log('remove handler');
|
||||
if (interaction.isApplicationCommand()) {
|
||||
interaction.createMessage(`Thanks`);
|
||||
}
|
||||
},
|
||||
},
|
||||
}),
|
||||
);
|
||||
Reference in New Issue
Block a user