commandstring / dphp-bot
An unofficial way to structure a DPHP Bot
Installs: 26
Dependents: 0
Suggesters: 0
Security: 0
Stars: 13
Watchers: 2
Forks: 5
Open Issues: 1
Type:project
Requires
- php: >=8.1
- commandstring/utils: ^1.7
- react/async: ^4.1
- team-reflex/discord-php: dev-master
- tnapf/env: ^1.1
Requires (Dev)
- ergebnis/composer-normalize: ^2.31
- fakerphp/faker: ^1.21
- friendsofphp/php-cs-fixer: ^3.16
- jetbrains/phpstorm-attributes: ^1.0
- phpunit/phpunit: ^10.1
- roave/security-advisories: dev-latest
- xheaven/composer-git-hooks: ^3.0
README
An unofficial way to structure a discordPHP bot.
Table of Contents
- Installation
- Important Resources
- Configuration
- Slash Commands
- Events
- Disabling Commands and Events
- Extending The Template
Installation
composer create-project commandstring/dphp-bot
Important Resources
DiscordPHP Discord Server Only ask questions relevant to DiscordPHP's own wrapper, not on how to use this.
Developer Hub Issues about this template can be asked here
Configuration
Copy the .env.example
file to .env
and add your bot token.
Slash Commands
Create a class that implements Core\Commands\CommandHandler
and attach the Core\Commands\Command
attribute to it.
<?php namespace Commands; use Core\Commands\Command; use Core\Commands\CommandHandler; use Discord\Builders\CommandBuilder; use Discord\Parts\Interactions\Interaction; use function Core\messageWithContent; #[Command] class Ping implements CommandHandler { public function handle(Interaction $interaction): void { $interaction->respondWithMessage(messageWithContent('Ping :ping_pong:'), true); } public function autocomplete(Interaction $interaction): void { } public function getConfig(): CommandBuilder { return (new CommandBuilder()) ->setName('ping') ->setDescription('Ping the bot'); } }
Once you start the bot, it will automatically register the command with Discord. And if you make any changes to the config, it will update the command on the fly.
Events
Create a class that implements any of the interfaces found inside of Core\Events
.
Implement the interface that matches your desired event.
<?php namespace Events; use Core\Events\Init; use Discord\Discord; class Ready implements Init { public function handle(Discord $discord): void { echo "Bot is ready!\n"; } }
If the interface doesn't exist use the Class Reference. Just create a interface that has a handle methods with args that match up with the ones in the event. Then sit it inside /Core/Events
Disabling Commands and Events
If you want to disable a command handler or event listener attach the Core\Commands\Disabled
attribute to it.
<?php namespace Events; use Core\Events\Init; use Discord\Discord; #[Disabled] class Ready implements Init { public function handle(Discord $discord): void { echo "Bot is ready!\n"; } }
Extending The Template
Bootstrap Sequence
Create a file inside /Bootstrap
and then require it inside of /Boostrap/Requires.php
.
Environment Variables
Add a doc comment to /Core/Env.php
and then add the variable to .env
You should also add it to .env.example