Week02 Project02 Chatbot Project
1. You are going to create a chatbot that you will deploy in a Discord channel
Core user stories:
- Project Setup with Libraries: As a back-end developer, I want to set up a new Node.js project in VS Code with the
discord.js
andopenai
libraries usingrequire('discord.js')
andrequire('openai')
after installing them withnpm
, so I can start building my bot with all necessary functionalities. - Secure Configuration: As a back-end developer, I want to configure my bot securely by using
require('dotenv/config')
to load my API keys from a.env
file, ensuring they are not hard-coded into my project, using a.gitignore
file. - Bot Initialisation: As a back-end developer, I want to initialise my Discord bot and log in to Discord using the
new Discord.Client()
constructor andclient.login
method with my Discord token, to start listening for messages. - Message Handling: As a back-end developer, I want to handle incoming messages by setting up a message event listener using
client.on('messageCreate', callback)
to process messages received in Discord and respond to them with a “hello” message. - Optimisation: As a developer, I want the bot to optimise its performance by efficiently handling events, so that it does not consume excessive resources. This may involve writing efficient callback functions for
client.on
andclient.once
, ensuring they execute tasks quickly and without unnecessary resource consumption. - OpenAI Chat Integration and Response Generation: As a back-end developer, I want to integrate OpenAI into my bot and send chat prompts to the API to generate responses. This would involve using the
openai.chat.completions.create()
method with my OpenAI API key. I aim to pass conversation history and other necessary parameters to this method to receive context-aware chat completions. This will enable the bot to generate dynamic, intelligent responses based on ongoing conversations, enhancing user interaction and experience. - Response Management: As a back-end developer, I want to manage the OpenAI response returned by
openai.chat.completions.create()
using eitherfetch
orasync/await
and sending the response back to the Discord channel. - Command Processing: As a back-end developer, I want to process commands directed at my bot by using string matching or a command prefix to distinguish between general messages and commands meant for the bot.
- Error Handling: As a back-end developer, I want to implement error handling in my bot interactions using either
.catch
ortry...catch
within myfetch
or ****async
functions to manage exceptions and provide error messages if something goes wrong.
Stretch user stories:
-
Messaging Users Directly:
Hint: Utilise the
user.send()
method in Discord.js to send direct messages to users. Retrieve the user object through events or commands that the bot receives. -
Dialogue Boxes and Interactive Responses:
Hint: Implement Discord’s message components like buttons and select menus using
MessageActionRow
andMessageButton
orMessageSelectMenu
classes from Discord.js. Handle interactions withclient.on(Events.InteractionCreate, callback)
. -
Creating Private Chats (Channels):
Hint: Use
guild.channels.create()
to create new private channels and manage access using permission overwrites in Discord.js. -
Automated Moderation Features:
Hint: Monitor messages for specific keywords or patterns using
client.on(Events.MessageCreate, callback)
. Implement moderation actions likemessage.delete()
for removing inappropriate content andguildMember.timeout()
for muting users. -
Multimedia Responses (Images, GIFs, Audio Clips):
Hint: Send multimedia content using
message.channel.send()
with thefiles
option. For audio, explore Discord.js voice modules for handling voice channels and streaming.
2. You are going to integrate testing into your Discord chatBot project.
The following user stories are designed to guide you as you integrate testing into your Discord chatBot project. If there are some which are not appropriate to your project, you do not have to integrate these. You can create your own tests that are relevant to your project.
Possible user stories:
As a back-end developer, I want to…
-
verify Discord.js integration by creating a test function that creates a new Discord client
-
ensure that the OpenAI library is correctly integrated by creating a test function that attempts to use the OpenAI API to create a simple chat completion or query
-
test that my bot securely loads API keys from the .env file, confirming that no sensitive information is hard-coded
-
ensure that my bot initialises and logs into Discord successfully
-
simulate receiving a message and verify that my bot responds with a “hello” message, testing the message event listener’s functionality
-
simulate commands directed at my bot to check if it accurately processes these commands from general messages
-
introduce faults or exceptions in bot interactions to verify that my bot’s error handling mechanisms effectively manage and log errors
-
mock the process of sending responses back to the Discord channel, verifying that my bot formats and dispatches messages correctly
-
ensure my bot can send direct messages to users, testing the user.send() method’s functionality
-
test my bot’s ability to send multimedia responses under specified conditions, ensuring it can handle images, GIFs, and audio clips effectively
Repository naming convention
Please name your repo following this template: PRO02_Name1_Name2_Name3_Name4