import Client from "../Interfaces/Client.js";
import Command from "../Interfaces/Command.js";
import sendLog from "../functions/sendLog.js";
function CommandHandler(client: Client): void {
fs.readdirSync("./build/commands").forEach(async dir => {
const commands = fs.readdirSync(`./build/commands/${dir}`).filter(file => file.endsWith(".js"));
for (const file of commands) {
const command: Command = await import(`../commands/${dir}/${file}`).then(
imported => imported.default
);
client.commands.set(command.data.name, command);
const handlerMessage = `[HANDLER - COMMAND] Loaded a command: ${file} (#${client.commands.size})`;
sendLog(handlerMessage, 2);
}
});
}
export default CommandHandler;
#super.user() error
30 messages · Page 1 of 1 (latest)
- Consider reading #how-to-get-help to improve your question!
- Explain what exactly your issue is.
- Post the full error stack trace, not just the top part!
- Show your code!
- Issue solved? Press the button!
✅Marked as resolved by OP
client was defined by (this)
Okay, you might need to actually implement that interface again, since your code seems to rely on it
so we could do client.user
client .commands
don
The super.user was so client.user could be used to mention bot properties
I need a way to add client.user without using super.user
But client.user already is a ClientUser per default. And your extends Client<true> should give you exactly what you want
Your interface might need to extend BaseClient<true> too though
And remove the user property from it
Original code:
import IClient from "../Interfaces/Client.js";
import Command from "../Interfaces/Command.js";
import ClientConfig from "../Interfaces/ClientConfig.js";
import CommandHandler from "../handlers/commandHandler.js";
import EventHandler from "../handlers/eventHandler.js";
import Modal from "../Interfaces/Modal.js";
import ModalHandler from "../handlers/modalHandler.js";
import { PasteClient } from "pastebin-api";
import secrets from "../json/secrets.json" assert { type: "json" };
import sendLog from "../functions/sendLog.js";
class Client extends BaseClient implements IClient {
public readonly commands: Collection<string, Command>;
public readonly modals: Collection<string, Modal>;
public user: ClientUser;
public pastebin: PasteClient;
constructor() {
super({
intents: [GatewayIntentBits.Guilds],
allowedMentions: { parse: ["users"] },
});
this.commands = new Collection<string, Command>();
this.modals = new Collection<string, Modal>();
this.user = super.user as ClientUser;
this.pastebin = new PasteClient(this.config.pastebin);
}
config = secrets as unknown as ClientConfig;
async init() {
await sendLog(`[SYSTEM] Handlers have been initiated.`);
await CommandHandler(this);
await EventHandler(this);
await ModalHandler(this);
await this.login(this.config.token);
}
}
export default Client;
BaseClient<true> (ah, original code, mb)
Remove public user… and this.user =… lines, add the <true> and same for the interface
adding true gives more errors
What errors?
src/events/interactionCreate/interactionCreate.ts:33:25 - error TS2345: Argument of type 'import("S:/Ahmad/Entertainment/Projects/Repositories/AkiraBot/src/Interfaces/Client").default' is not assignable to parameter of type 'import("S:/Ahmad/Entertainment/Projects/Repositories/AkiraBot/src/structures/Client").default'.
33 await command.run(client, interaction);
~~~~~~
src/events/interactionCreate/modal.ts:17:30 - error TS2345: Argument of type 'import("S:/Ahmad/Entertainment/Projects/Repositories/AkiraBot/src/Interfaces/Client").default' is not assignable to parameter of type 'import("S:/Ahmad/Entertainment/Projects/Repositories/AkiraBot/src/structures/Client").default'.
17 await modalCommand.run(client, interaction);
~~~~~~
src/structures/Client.ts:25:23 - error TS2855: Class field 'user' defined by the parent class is not accessible in the child class via super.
25 this.user = super.user as ClientUser;
~~~~
src/structures/Event.ts:7:10 - error TS2416: Property 'run' in type 'Event<K>' is not assignable to the same property in base type 'Event<K>'.
Type '(client: Client, ...args: ClientEvents[K]) => unknown' is not assignable to type '(client: Client, ...args: ClientEvents[K]) => any'.
Types of parameters 'client' and 'client' are incompatible.
Type 'import("S:/Ahmad/Entertainment/Projects/Repositories/AkiraBot/src/Interfaces/Client").default' is not assignable to type 'import("S:/Ahmad/Entertainment/Projects/Repositories/AkiraBot/src/structures/Client").default'.
Types of property '_ready' are incompatible.
Type 'boolean' is not assignable to type 'true'.
7 public run: (client: Client, ...args: ClientEvents[K]) => unknown;
~~~
Found 4 errors in 4 files.
Errors Files
1 src/events/interactionCreate/interactionCreate.ts:33
1 src/events/interactionCreate/modal.ts:17
1 src/structures/Client.ts:25
1 src/structures/Event.ts:7
Without true its only
src/structures/Client.ts:25:23 - error TS2855: Class field 'user' defined by the parent class is not accessible in the child class via super.
25 this.user = super.user as ClientUser;
~~~~
Found 1 error in src/structures/Client.ts:25
Of those „new“ errors only the last one would be present if you did all the changes I said
Ok
doing
Wow
Not even the last one should be
IT WORKED
Thanks so much
!
I owe you everything
I tried for so long