Thank you for your interest in contributing to PN Bot! This guide will help you get started and ensure your contributions meet our standards.
Before we merge your pull request, you must star this repository.
This requirement serves two important purposes:
- Verification: Confirms you're a human contributor, not a bot or spam account
- Support: Shows your appreciation for the work and helps grow our community
We consider stargazers as part of our team helping shape this repository's future.
- Browse our Issues tab
- Look for issues labeled
good first issueif you're new to open source - Comment "I would like to work on this" on the issue you'd like to tackle
- Wait for assignment before starting work
git clone https://github.com/YOUR_USERNAME/pn.git
cd pngit checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-description- Follow our code standards (see below)
- Test your changes thoroughly
- Update documentation if needed
- Ensure no console errors or warnings
Before submitting your PR:
- Go to the main repository: https://github.com/IN3PIRE/pn
- Click the ⭐ "Star" button at the top right
- This is mandatory for PR consideration
git add .
git commit -m "feat: add amazing new feature"
git push origin feature/your-feature-nameThen create a pull request on GitHub. Our team will review it promptly.
- Use discord.py v2.3.2+ patterns - No deprecated methods
- Follow existing code style - Match indentation and formatting (4 spaces)
- Add type hints - All functions must have proper type annotations
- Add docstrings - Follow Google style or reStructuredText format
- Test your code - No errors in console, commands work as expected
- Handle errors gracefully - Try/except blocks where appropriate
Prefix Commands:
import discord
from discord.ext import commands
class CommandName(commands.Cog):
def __init__(self, bot: commands.Bot) -> None:
self.bot = bot
@commands.command(name='commandname')
async def command_name(self, ctx: commands.Context) -> None:
"""Brief description here."""
# Command logic here
await ctx.send('Response')
async def setup(bot: commands.Bot) -> None:
await bot.add_cog(CommandName(bot))Slash Commands:
@bot.tree.command(name='commandname', description='Description here')
async def command_name(interaction: discord.Interaction) -> None:
"""Brief description here."""
# Command logic here
await interaction.response.send_message('Response')All functions must include type hints:
async def command(self, ctx: commands.Context, argument: str) -> None:
pass- ❌ Don't submit PRs for issues you weren't assigned
- ❌ Don't include unrelated changes in a single PR
- ❌ Don't commit
__pycache__,.venv,.env, or IDE files - ❌ Don't use blocking operations (use async/await)
- ❌ Don't ignore error handling
- ❌ Don't use
print()for logging (useloggingmodule)
good first issue- Perfect for newcomershelp wanted- Extra attention neededenhancement- New features or improvementsbug- Something isn't workingdocumentation- Improvements to docs
If you need help:
- Comment on the issue you're working on
- Check existing PRs for examples
- Review the discord.py Guide
Contributors who actively participate and star the repo will be recognized in our README and release notes. We value every contribution, from code to documentation to bug reports.
Thank you for helping make this project better! ⭐