This Discord bot leverages the Anthropic Claude and Google Gemini APIs to deliver dynamic conversational experiences. Powered by Anthropic's advanced Claude models and Google's robust Gemini language models, the bot can respond to user messages, maintain conversation history, and execute various commands. It also offers engaging interactions with diverse personas, tailored by the selected model and prompt.
- Responds to user messages using the Anthropic API (Claude models) and Google Generative AI
- Maintains conversation history for each user
- Supports slash commands for user interactions
- Clears conversation history using the
/clear
command - Saves conversation and sends it to the user's inbox using the
/save
command - Changes the model used by the bot using the
/model
command - Changes the system prompt used by the bot using the
/prompt
command - Resets the model and prompt to the default settings using the
/reset
command - Displays the list of available commands and their usage using the
/help
command - Triggers a test error to check the error notification webhook using the
/testerror
command (restricted to the bot owner) - Displays the user's current model and prompt settings using the
/settings
command - Automatically changes the bot's presence status with various activities
- Engages users with different personas based on the selected model and prompt:
- Neko: A witty and funny cat with a passion for gaming and adventures in Ragnarok Mobile: Eternal Love
- Helpful Assistant: A caring and supportive AI assistant created by Anthropic
- JavaScript Developer: An experienced JavaScript developer with expertise in modern web development technologies
- Python Developer: A skilled Python developer with a passion for building efficient and scalable applications
- Implements rate limiting for user requests and API calls to prevent abuse and ensure fair usage
- Handles errors gracefully and sends error notifications via Discord webhook
- Logs errors to files for debugging and monitoring purposes
- Includes a comprehensive test suite using Jest for ensuring code quality and reliability
- Utilizes Upstash Redis for storing and managing allowed channel IDs
- Provides an API endpoint to add or remove allowed channel IDs dynamically
- Optimizes the implementation to reduce Redis queries and improve performance
- Protects the API endpoint with API key-based authentication to prevent unauthorized access
This project is under active development, and I may introduce breaking changes or new features in future updates based on my evolving use case and requirements.
Enjoy interacting with the Discord bot and exploring its various capabilities!
This guide will walk you through the process of setting up and running the Neko Discord Bot on your own server.
Requirements:
- Node.js and npm (or yarn) installed on your system.
- A Discord account and a server where you have administrator permissions.
- An Anthropic API key with access to the Claude models.
- A Google API key with access to the Google Generative AI API.
- An Upstash Redis database for storing allowed channel IDs.
Steps:
-
Clone the Repository:
- Open a terminal or command prompt and navigate to the directory where you want to store the bot's files.
- Clone the repository using git:
git clone https://github.com/llegomark/discord-bot-claude-gemini.git
- Navigate to the newly created directory:
cd discord-bot-claude-gemini
-
Install Dependencies:
- Install the required dependencies using npm or yarn:
npm install
or
yarn install
-
Set up Environment Variables:
- Create a file named
.env
in the project's root directory. - Add the following environment variables to the file, replacing the placeholders with your actual values:
DISCORD_BOT_TOKEN=YOUR_DISCORD_BOT_TOKEN ANTHROPIC_API_KEY=YOUR_ANTHROPIC_API_KEY GOOGLE_API_KEY_1=YOUR_GOOGLE_API_KEY_1 GOOGLE_API_KEY_2=YOUR_GOOGLE_API_KEY_2 GOOGLE_API_KEY_3=YOUR_GOOGLE_API_KEY_3 GOOGLE_API_KEY_4=YOUR_GOOGLE_API_KEY_4 GOOGLE_API_KEY_5=YOUR_GOOGLE_API_KEY_5 GOOGLE_MODEL_NAME=YOUR_GOOGLE_MODEL_NAME DISCORD_CLIENT_ID=YOUR_DISCORD_CLIENT_ID DISCORD_USER_ID=YOUR_DISCORD_USER_ID ERROR_NOTIFICATION_WEBHOOK=YOUR_ERROR_NOTIFICATION_WEBHOOK_URL CONVERSATION_INACTIVITY_DURATION=INACTIVITY_DURATION_IN_MILLISECONDS CLOUDFLARE_AI_GATEWAY_URL=YOUR_CLOUDFLARE_AI_GATEWAY_URL PORT=YOUR_DESIRED_PORT_NUMBER UPSTASH_REDIS_URL=YOUR_UPSTASH_REDIS_URL UPSTASH_REDIS_TOKEN=YOUR_UPSTASH_REDIS_TOKEN API_KEY=YOUR_API_KEY
- You can obtain your Discord bot token from the Discord Developer Portal.
- The Anthropic API key can be obtained from the Anthropic Console.
- The Google API keys can be obtained from the Google AI Studio.
- Replace
YOUR_DISCORD_USER_ID
with your Discord user ID to restrict the/testerror
command to the bot owner. - Set the
CONVERSATION_INACTIVITY_DURATION
to the desired duration in milliseconds after which inactive conversations will be cleared (default: 3 hours). - If you're using Cloudflare AI Gateway for enhanced privacy and security, provide the URL in the
CLOUDFLARE_AI_GATEWAY_URL
variable. - Set the
UPSTASH_REDIS_URL
andUPSTASH_REDIS_TOKEN
variables with your Upstash Redis database URL and token. - Generate a unique API key for the API endpoint and set it in the
API_KEY
variable.
- Create a file named
-
Deploy Slash Commands:
- Run the following command to deploy the slash commands to your Discord server:
node src/deploy-commands.js
-
Start the Bot:
- In the terminal, run the following command to start the bot:
npm start
or
yarn start
- The bot will connect to Discord and be ready to interact with users.
Interacting with the Bot:
- Seamless Conversation: To chat directly with the bot, ensure you are in a channel where the bot has appropriate permissions and the channel ID is included in the allowed list. Once set up, simply send your message in the channel, and the bot will respond accordingly without needing a mention.
- Slash Commands: Use the available slash commands to interact with the bot and perform various actions.
Managing Allowed Channel IDs:
- To add or remove allowed channel IDs, make a POST request to the
/api/allowedChannels
endpoint with the following JSON payload:{ "channelId": "CHANNEL_ID", "action": "add" or "remove" }
- Include the API key in the request headers using the
X-API-Key
header. - Example cURL command to add a channel ID:
curl -X POST -H "Content-Type: application/json" -H "X-API-Key: YOUR_API_KEY" -d '{"channelId": "1234567890", "action": "add"}' http://localhost:4000/api/allowedChannels
Additional Notes:
- You can customize the bot's behavior and responses by modifying the code in the
src
folder. - The
errorHandler.js
file contains error handling logic, including sending error notifications via Discord webhook and logging errors to files. - Make sure to keep your API keys, bot token, and Upstash Redis credentials secure. Do not share them publicly.
- Refer to the Discord.js documentation, Anthropic API documentation, and Google Gemini API documentation for more information on the available features and options.
The project includes a comprehensive test suite using Jest. To run the tests, use the following command:
npm test
or
yarn test
The test results will be displayed in the console, showing the number of passed and failed tests, as well as the test coverage report.
Q: Do you have plans to integrate the OpenAI API? A: No, I currently have no plans to integrate the OpenAI API. The responses from Claude and Gemini are excellent for my use case, and I've been very satisfied with their performance since the release of Claude 3.
Q: What about Gemini 1.5 Pro API? A: I already have access to the Google Gemini 1.5 Pro model, and I plan to integrate it into the Discord bot as soon as the API access becomes publicly available and exits the beta stage.
Q: How can I host this Discord bot? A: The README file provides a comprehensive setup guide for hosting the bot on your own server. If you require assistance with installation and setup, I offer bot hosting services for a small fee. Please contact me directly for more information.
Note: These are some of the frequently asked questions I receive via Discord. If you have any other questions or need further clarification, feel free to reach out to me directly.
Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or submit a pull request.
This project is licensed under the MIT License.