<a href="https://jgltechnologies.com/ddiscord">
<img src="https://discord.com/api/guilds/844418702430175272/embed.png">
</a>
# DPYS
## The goal of DPYS is to make basic functionalities that every good bot needs easy to implement for beginners.
A big update was just released that added disnake support. If there are any bugs please report
them <a href="https://jgltechnologies.com/contact">here</a>.
[DPYS](https://jgltechnologies.com/dpys) is a library that makes functionalites such as warnings, curse filter, reaction
roles, anti mute evade, and many more easy to add to your bot. All DPYS databases use
the [aiosqlite library](https://aiosqlite.omnilib.dev/en/latest/). Support for DPYS can be given
in [our Discord server](https://jgltechnologies.com/disnake). If you see any problems in the code or want to add a
feature, create a pull request on [our Github repository](https://jgltechnologies.com/dpys/src).
<br>
Install from pypi
```
python -m pip install dpys
```
<br>
Install from github
```
python -m pip install git+https://github.com/JGLTechnologies/dpys
```
Setup
<br>
```python
import dpys
from disnake.ext import commands
bot = commands.AutoShardedBot(command_prefix="!")
TOKEN = "Your Token"
bot.loop.create_task(dpys.setup(bot, "database directory"))
bot.run()
```
<br>
Reaction role example
<br>
```python
import dpys
from disnake.ext import commands
import disnake
bot = commands.AutoShardedBot(command_prefix="!")
TOKEN = "Your Token"
# Do not type hint disnake.Role for the role argument
# Command to create the reaction role
@bot.slash_command(name="rr")
async def reaction_role_command(inter: disnake.ApplicationCommandInteraction, emoji: str = commands.Param(
description="An emoji or list of emojis"),
role: str = commands.Param(
description="a Role or list of roles."),
title: str = commands.Param(description="The title for the embed"),
description: str = commands.Param(description="The description for the embed")):
"""
It is used like this
/rr emoji @role <Embed Title> <Embed Description>
You can make one with multiple emojis and role.
/rr emojis: emoji1, emoji2 roles: @role1, @role2 title Description
Just make sure to separate the emojis and roles with commas and match the position of the roles and emojis.
"""
await dpys.rr.command(
inter, emoji, role, title, description
)
# Adds role on reaction
@bot.listen("on_raw_reaction_add")
async def role_add(payload):
await dpys.rr.add(payload, bot)
# Removes role when reaction is removed
@bot.listen("on_raw_reaction_remove")
async def role_remove(payload):
await dpys.rr.remove(payload, bot)
# Command to list all current reaction roles in the guild
@bot.slash_command(name="listrr")
async def listrr(inter: disnake.ApplicationCommandInteraction):
await dpys.rr.display(inter)
# Command to remove reaction role info from the database
@bot.slash_command(name="rrclear")
async def rrclear(inter: disnake.ApplicationCommandInteraction, id: str = commands.Param(
description="The id or list of ids of the reaction roles you want to remove")):
"""
Putting "all" as the id argument will wipe all reaction role data for the guild.
To remove specific ones put the message id as the id argument. You can put multiple just separate by commas.
The id can be found using the above command.
This command does not need to be added if you use the event listeners bellow.
"""
id = id.lower()
if id == "all":
await dpys.rr.clear_all(inter)
else:
await dpys.rr.clear_one(inter, int(id))
# Removes data for a reaction role when its message is deleted. Does not work with channel.purge(). For that you need dpys.rr.clear_on_raw_bulk_message_delete()
@bot.listen("on_message_delete")
async def rr_clear_on_message_delete(message):
await dpys.rr.clear_on_message_delete(message)
# Removes data for a reaction role when its channel is deleted
@bot.listen("on_channel_delete")
async def rr_clear_on_channel_delete(channel):
await dpys.rr.clear_on_channel_delete(channel)
# Removes data for a reaction role when its thread is deleted
@bot.listen("on_thread_delete")
async def rr_clear_on_thread_delete(thread):
await dpys.rr.clear_on_thread_delete(thread)
# Removes data for a reaction role when its message is deleted in channel.purge()
@bot.listen("on_raw_bulk_message_delete")
async def rr_clear_on_raw_bulk_message_delete(payload):
await dpys.rr.clear_on_raw_bulk_message_delete(payload)
# Clears all DPYS data for a guild when it is removed
@bot.listen("on_guild_remove")
async def clear_on_guild_remove(guild):
await dpys.misc.clear_data_on_guild_remove(guild)
bot.loop.create_task(dpys.setup(bot, DIR))
bot.run(TOKEN)
```
<br>
<br>
# Documentation
You will hear 'mute remove role' mentioned a lot. This is just an optional role that gets removed when a member is
muted, and added back when they are unmuted.
## Admin class
Kick:
```python
async def kick(inter: disnake.ApplicationCommandInteraction, member: disnake.Member,
reason: typing.Optional[str] = None, msg: str = None) -> None
```
```python
import dpys
@bot.slash_command(name="kick")
@commands.has_permissions(kick_members=True)
async def kick(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):
await dpys.admin.kick(inter, member, reason)
```
<br>
Ban:
```python
async def ban(inter: disnake.ApplicationCommandInteraction, member: disnake.Member,
reason: typing.Optional[str] = None, msg: str = None) -> None
```
```python
@bot.slash_command(name="ban")
@commands.has_permissions(ban_members=True)
async def ban(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):
await dpys.admin.ban(inter, member, reason)
```
<br>
Softban:
```python
async def softban(inter: disnake.ApplicationCommandInteraction, member: disnake.Member,
reason: typing.Optional[str] = None, msg: str = None) -> None
```
```python
@bot.slash_command(name="softban")
@commands.has_permissions(ban_members=True)
async def softban(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):
await dpys.admin.softban(inter, member, reason)
```
<br>
Unban:
```python
async def unban(inter: ApplicationCommandInteraction, member: typing.Union[str, int], msg: str = None) -> bool:
```
```python
@bot.slash_command(name="unban")
@commands.has_permissions(ban_members=True)
async def unban(inter, member: string = commands.Param()):
await dpys.admin.unban(inter, member)
```
<br>
Mute:
```python
async def mute(inter: disnake.ApplicationCommandInteraction, member: disnake.Member, role_add: int,
role_remove: typing.Optional[int] = None, reason: str = None, msg: str = None) -> None
```
```python
@bot.slash_command(name="mute")
async def mute(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):
await dpys.admin.mute(inter, member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE_ID, reason=reason)
```
<br>
Unmute:
```python
async def unmute(inter: disnake.ApplicationCommandInteraction, member: disnake.Member, role_remove: int,
role_add: typing.Optional[int] = None, msg: str = None) -> bool
```
```python
@bot.slash_command(name="unmute")
async def unmute(inter, member: disnake.Member = commands.Param()):
await dpys.admin.unmute(inter, member, MUTE_REMOVE_ROLE_ID, MUTE_ROLE_ID)
```
<br>
Clear:
```python
async def clear(inter: disnake.ApplicationCommandInteraction, amount: typing.Optional[int] = 99999999999999999,
msg: str = None) -> int
```
```python
@bot.slash_command(name="clear")
async def clear(inter, amount: int = commands.Param(default=99999999999999999)):
await dpys.admin.clear(inter, amount)
```
<br>
Timeout:
```python
async def timeout(inter: ApplicationCommandInteraction, member: discord.Member,
duration: Union[float, datetime.timedelta] = None, until: datetime.datetime = None,
reason: typing.Optional[str] = None, msg: str = None) -> None:
```
```python
@bot.slash_command(name="timeout")
async def timeout(inter, seconds: int = commands.Param(), reason: str = commands.Param(None)):
await dpys.admin.timeout(inter, duration=seconds, reason=reason)
```
<br>
## mute_on_join Class
Add Member:
```python
async def mute_add(guild: disnake.Guild, member: disnake.Member) -> None
```
```python
@bot.slash_command(name="mute")
async def mute(inter, member: dicord.Member = commands.Param(), reason: str = commands.Param(default=None)):
await dpys.admin.mute(inter, member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE_ID, reason)
await dpys.mute_on_join.mute_add(inter.guild, member)
```
<br>
Remove Member:
```python
async def mute_remove(guild: disnake.Guild, member: disnake.Member) -> None
```
```python
@bot.slash_command(name="unmute")
async def unmute(inter, member: dicord.Member = commands.Param()):
await dpys.admin.unmute(inter, member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE_ID)
await dpys.mute_on_join.mute_remove(inter.guild, member)
```
<br>
Mute On Join Event Listener:
```python
async def mute_on_join(member: disnake.Member, role_add: int, role_remove: Optional[int] = None) -> None
```
```python
@bot.listen("on_member_join")
async def mute_on_join(member: disnake.Member):
await dpys.mute_on_join.mute_on_join(member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE)
```
<br>
Manual Unmute Check:
```python
async def manual_unmute_check(after: disnake.Member, roleid: int) -> None
```
```python
import dpys
@bot.listen("on_member_update")
async def manual_unmute_check(before: disnake.Member, after: disnake.Member):
await dpys.mute_on_join.manual_unmute_check(after, MUTE_ROLE_ID)
```
<br>
## rr Class
Command:
```python
async def command(inter: disnake.ApplicationCommandInteraction, emoji: str, role: str, title: str,
description: str) -> None
```
```python
# Don't type hint disnake.Role for the role parameter
@bot.slash_command(name="rr")
async def reactionrole(inter, emoji: str = commands.Param(), role: str = commands.Param(),
title: str = commands.Param(), description: str = commands.Param()):
await dpys.rr.command(inter, emoji, role, title, description)
```
<br>
Command To List Reaction Roles:
```python
async def display(inter: ApplicationCommandInteraction) -> None
```
```python
@bot.slash_command(name="listrr")
async def listrr(inter: disnake.ApplicationCommandInteraction):
await dpys.rr.display(inter)
```
<br>
On Raw Reaction Add Event Listener:
```python
async def add(payload: disnake.RawReactionActionEvent, bot: commands.Bot) -> None
```
```python
@bot.listen('on_raw_reaction_add')
async def rr_add(payload: disnake.RawReactionActionEvent):
await dpys.rr.add(payload, bot)
```
<br>
On Raw Reaction Remove Event Listener:
```python
async def remove(payload: disnake.RawReactionActionEvent, bot: commands.Bot) -> None
```
```python
@bot.listen('on_raw_reaction_remove')
async def rr_remove(payload: disnake.RawReactionActionEvent):
await dpys.rr.remove(payload, bot)
```
<br>
Clear Reaction Role command:
```python
async def clear_all(inter: disnake.ApplicationCommandInteraction) -> None
async def clear_one(inter: disnake.ApplicationCommandInteraction, message_id: int) -> None
```
```python
@bot.slash_command(name="rrclear")
async def rrclear(inter, id: str = commands.Param()):
if id.lower() == "all":
await dpys.rr.clear_all(inter)
else:
await dpys.rr.clear_one(inter, id)
```
<br>
Event Listeners To Clear Reaction Role Data:
```python
@bot.listen("on_message_delete")
async def rr_clear_on_message_delete(message: disnake.Message):
await dpys.rr.clear_on_message_delete(message)
@bot.listen("on_raw_bulk_message_delete")
async def rr_clear_on_raw_bulk_message_delete(payload: disnake.RawBulkMessageDeleteEvent):
await dpys.rr.clear_on_bulk_message_delete(payload)
@bot.listen("on_channel_delete")
async def rr_clear_on_channel_delete(channel: disnake.TextChannel):
await dpys.rr.clear_on_channel_delete(channel)
@bot.listen("on_thread_delete")
async def rr_clear_on_thread_delete(thread: disnake.Thread):
await dpys.rr.clear_on_thread_delete(thread)
```
<br>
## warnings Class
Warn:
```python
async def warn(inter: ApplicationCommandInteraction, member: discord.Member,
reason: typing.Optional[str] = None, expires: Optional[int] = -1) -> None:
```
```python
@bot.slash_command(name="warn")
async def warn(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param(),
reason: str = commands.Param(default=None)):
# Warning will expire in 1 day
await dpys.warnings.warn(inter, member, reason, time.now() + 86400)
```
<br>
Unwarn:
```python
async def unwarn(inter: disnake.ApplicationCommandInteraction, member, dir, number: typing.Union[int, str]) -> bool
```
```python
# Pass in "all" as the number parameter to clear all warnings from a member
@bot.slash_command(name="unwarn")
async def unwarn(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param(),
number: str = commands.Param(default="all")):
await dpys.warnings.unwarn(inter, member, number)
```
<br>
Punish:
```python
async def punish(inter: ApplicationCommandInteraction, member: discord.Member,
punishments: typing.Mapping[int, Punishment],
add_role: typing.Optional[int] = None, remove_role: typing.Optional[int] = None,
before: Optional[
Callable[[int, Punishment, discord.Member], Awaitable[Optional[Member]]]] = None) -> None:
```
```python
@bot.slash_command(name="warn")
async def warn(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param(),
reason: str = commands.Param(default=None)):
await dpys.warnings.warn(inter, member, reason)
# This will do nothing for the first 2 warnings, but on the third warning it will kick the member.
# Valid punishments for dpys.warnings.Punishment are kick, ban, mute, temp_ban, temp_mute, timeout
# If you want to mute you have to pass in you mute role id and an optional mute remove role id.
# For temporary punishments, a duration parameter can be passed into the dpys.warnings.Punishment constructor.
# This is the number of seconds that the punishment will last.
await dpys.warnings.punish(inter, member,
{3: dpys.warnings.Punishment("kick")})
```
<br>
If you want to use temp_ban or temp_mute, then include this cog in your bot.
```python
from disnake.ext import commands, tasks
import dpys
GET_MUTE_ROLE_ID = "an async function that takes in a guild id and returns the id for your mute role"
GET_MUTE_REMOVE_ROLE_ID = "an async function that takes in a guild id and returns the id for your mute remove role"
class DpysLoops(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.dpys_tempmute_loop.start()
self.dpys_tempban_loop.start()
@tasks.loop(seconds=1)
async def dpys_tempmute_loop(self):
await dpys.warnings.temp_mute_loop(self.bot, GET_MUTE_ROLE_ID, GET_MUTE_REMOVE_ROLE_ID)
@dpys_tempmute_loop.before_loop
async def before_dpys_tempmute_loop(self):
await self.bot.wait_until_ready()
@tasks.loop(minutes=30)
async def dpys_expire(self):
await dpys.warnings.expire_loop()
@dpys_expire.before_loop
async def before_dpys_tempmute_loop(self):
await self.bot.wait_until_ready()
@tasks.loop(seconds=1)
async def dpys_tempban_loop(self):
await dpys.warnings.temp_ban_loop(self.bot)
@dpys_tempban_loop.before_loop
async def before_dpys_tempban_loop(self):
await self.bot.wait_until_ready()
def setup(bot):
bot.add_cog(DpysLoops(bot))
```
<br>
Warnings:
```python
async def warnings(inter: disnake.ApplicationCommandInteraction, member: disnake.Member, number: int = 0) -> None
```
The number is what warning you want to see. Set it to 0 to see the 5 most recent warnings.
```python
@bot.slash_command(name="warnings")
async def warnings(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param()):
await dpys.warnings.warnings(inter, member)
```
<br>
```
warnings_list(guild: int, member_id: int)
```
Returns the actual list of warnings for a member
<br>
## curse Class
Add Word:
```python
async def add_banned_word(inter: disnake.ApplicationCommandInteraction, word: str) -> None
```
```python
@bot.slash_command(name="addword")
async def add_word(inter: disnake.ApplicationCommandInteraction, curses: str = commands.Param()):
await dpys.curse.add_banned_word(inter, curses)
```
<br>
Remove Word:
```python
async def remove_banned_word(inter: disnake.ApplicationCommandInteraction, word: str) -> None
```
```python
@bot.slash_command(name="removeword")
async def remove_word(inter: disnake.ApplicationCommandInteraction, curses: str = commands.Param()):
await dpys.curse.remove_banned_word(inter, curses)
```
<br>
Clear Words:
```python
async def clear_words(inter: disnake.ApplicationCommandInteraction) -> None
```
```python
@bot.slash_command(name="clearwords")
async def clear_words(inter: disnake.ApplicationCommandInteraction):
await dpys.curse.clear_words(inter)
```
<br>
## misc Class
Reload:
```python
async def reload(inter: disnake.ApplicationCommandInteraction, bot: commands.Bot, cogs: typing.List[str]) -> None
```
```python
@bot.slash_command(name="reload")
async def reload(inter: disnake.ApplicationCommandInteraction):
cogs = ["cogs.admin", "cogs.fun", "cogs.misc"]
await dpys.misc.reload(inter, bot, cogs)
```
<br>
Clear DPYS Data On Guild Remove:
```python
@bot.listen("on_guild_remove")
async def clear_dpys_data(guild: disnake.Guild):
await dpys.misc.clear_data_on_guild_remove(guild)
```
Raw data
{
"_id": null,
"home_page": "https://jgltechnologies.com/dpys",
"name": "dpys",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "discord",
"author": "George Luca",
"author_email": "fixingg@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/7c/ea/6996f5da525f0169f731cee4501c051987333731d6984cc3167814e6e377/dpys-5.6.3.tar.gz",
"platform": null,
"description": "<a href=\"https://jgltechnologies.com/ddiscord\">\r\n<img src=\"https://discord.com/api/guilds/844418702430175272/embed.png\">\r\n</a>\r\n\r\n# DPYS\r\n\r\n## The goal of DPYS is to make basic functionalities that every good bot needs easy to implement for beginners.\r\n\r\nA big update was just released that added disnake support. If there are any bugs please report\r\nthem <a href=\"https://jgltechnologies.com/contact\">here</a>.\r\n\r\n[DPYS](https://jgltechnologies.com/dpys) is a library that makes functionalites such as warnings, curse filter, reaction\r\nroles, anti mute evade, and many more easy to add to your bot. All DPYS databases use\r\nthe [aiosqlite library](https://aiosqlite.omnilib.dev/en/latest/). Support for DPYS can be given\r\nin [our Discord server](https://jgltechnologies.com/disnake). If you see any problems in the code or want to add a\r\nfeature, create a pull request on [our Github repository](https://jgltechnologies.com/dpys/src).\r\n\r\n<br>\r\n\r\nInstall from pypi\r\n\r\n```\r\npython -m pip install dpys\r\n```\r\n\r\n<br>\r\n\r\nInstall from github\r\n\r\n```\r\npython -m pip install git+https://github.com/JGLTechnologies/dpys\r\n```\r\n\r\nSetup\r\n\r\n<br>\r\n\r\n```python\r\nimport dpys\r\nfrom disnake.ext import commands\r\n\r\nbot = commands.AutoShardedBot(command_prefix=\"!\")\r\nTOKEN = \"Your Token\"\r\n\r\nbot.loop.create_task(dpys.setup(bot, \"database directory\"))\r\nbot.run()\r\n```\r\n\r\n<br>\r\n\r\nReaction role example\r\n\r\n<br>\r\n\r\n```python\r\nimport dpys\r\nfrom disnake.ext import commands\r\nimport disnake\r\n\r\nbot = commands.AutoShardedBot(command_prefix=\"!\")\r\nTOKEN = \"Your Token\"\r\n\r\n\r\n# Do not type hint disnake.Role for the role argument\r\n# Command to create the reaction role\r\n@bot.slash_command(name=\"rr\")\r\nasync def reaction_role_command(inter: disnake.ApplicationCommandInteraction, emoji: str = commands.Param(\r\n description=\"An emoji or list of emojis\"),\r\n role: str = commands.Param(\r\n description=\"a Role or list of roles.\"),\r\n title: str = commands.Param(description=\"The title for the embed\"),\r\n description: str = commands.Param(description=\"The description for the embed\")):\r\n \"\"\"\r\n It is used like this\r\n /rr emoji @role <Embed Title> <Embed Description>\r\n You can make one with multiple emojis and role.\r\n /rr emojis: emoji1, emoji2 roles: @role1, @role2 title Description\r\n Just make sure to separate the emojis and roles with commas and match the position of the roles and emojis.\r\n \"\"\"\r\n await dpys.rr.command(\r\n inter, emoji, role, title, description\r\n )\r\n\r\n\r\n# Adds role on reaction\r\n@bot.listen(\"on_raw_reaction_add\")\r\nasync def role_add(payload):\r\n await dpys.rr.add(payload, bot)\r\n\r\n\r\n# Removes role when reaction is removed\r\n@bot.listen(\"on_raw_reaction_remove\")\r\nasync def role_remove(payload):\r\n await dpys.rr.remove(payload, bot)\r\n\r\n\r\n# Command to list all current reaction roles in the guild\r\n@bot.slash_command(name=\"listrr\")\r\nasync def listrr(inter: disnake.ApplicationCommandInteraction):\r\n await dpys.rr.display(inter)\r\n\r\n\r\n# Command to remove reaction role info from the database\r\n@bot.slash_command(name=\"rrclear\")\r\nasync def rrclear(inter: disnake.ApplicationCommandInteraction, id: str = commands.Param(\r\n description=\"The id or list of ids of the reaction roles you want to remove\")):\r\n \"\"\"\r\n Putting \"all\" as the id argument will wipe all reaction role data for the guild.\r\n To remove specific ones put the message id as the id argument. You can put multiple just separate by commas.\r\n The id can be found using the above command.\r\n This command does not need to be added if you use the event listeners bellow.\r\n \"\"\"\r\n id = id.lower()\r\n if id == \"all\":\r\n await dpys.rr.clear_all(inter)\r\n else:\r\n await dpys.rr.clear_one(inter, int(id))\r\n\r\n\r\n# Removes data for a reaction role when its message is deleted. Does not work with channel.purge(). For that you need dpys.rr.clear_on_raw_bulk_message_delete()\r\n@bot.listen(\"on_message_delete\")\r\nasync def rr_clear_on_message_delete(message):\r\n await dpys.rr.clear_on_message_delete(message)\r\n\r\n\r\n# Removes data for a reaction role when its channel is deleted\r\n@bot.listen(\"on_channel_delete\")\r\nasync def rr_clear_on_channel_delete(channel):\r\n await dpys.rr.clear_on_channel_delete(channel)\r\n\r\n\r\n# Removes data for a reaction role when its thread is deleted\r\n@bot.listen(\"on_thread_delete\")\r\nasync def rr_clear_on_thread_delete(thread):\r\n await dpys.rr.clear_on_thread_delete(thread)\r\n\r\n\r\n# Removes data for a reaction role when its message is deleted in channel.purge()\r\n@bot.listen(\"on_raw_bulk_message_delete\")\r\nasync def rr_clear_on_raw_bulk_message_delete(payload):\r\n await dpys.rr.clear_on_raw_bulk_message_delete(payload)\r\n\r\n\r\n# Clears all DPYS data for a guild when it is removed\r\n@bot.listen(\"on_guild_remove\")\r\nasync def clear_on_guild_remove(guild):\r\n await dpys.misc.clear_data_on_guild_remove(guild)\r\n\r\n\r\nbot.loop.create_task(dpys.setup(bot, DIR))\r\nbot.run(TOKEN)\r\n```\r\n\r\n<br>\r\n<br>\r\n\r\n# Documentation\r\n\r\nYou will hear 'mute remove role' mentioned a lot. This is just an optional role that gets removed when a member is\r\nmuted, and added back when they are unmuted.\r\n\r\n## Admin class\r\n\r\nKick:\r\n\r\n```python\r\nasync def kick(inter: disnake.ApplicationCommandInteraction, member: disnake.Member,\r\n reason: typing.Optional[str] = None, msg: str = None) -> None\r\n```\r\n\r\n```python\r\nimport dpys\r\n\r\n\r\n@bot.slash_command(name=\"kick\")\r\n@commands.has_permissions(kick_members=True)\r\nasync def kick(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):\r\n await dpys.admin.kick(inter, member, reason)\r\n```\r\n\r\n<br>\r\n\r\nBan:\r\n\r\n```python\r\nasync def ban(inter: disnake.ApplicationCommandInteraction, member: disnake.Member,\r\n reason: typing.Optional[str] = None, msg: str = None) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"ban\")\r\n@commands.has_permissions(ban_members=True)\r\nasync def ban(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):\r\n await dpys.admin.ban(inter, member, reason)\r\n```\r\n\r\n<br>\r\n\r\nSoftban:\r\n\r\n```python\r\nasync def softban(inter: disnake.ApplicationCommandInteraction, member: disnake.Member,\r\n reason: typing.Optional[str] = None, msg: str = None) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"softban\")\r\n@commands.has_permissions(ban_members=True)\r\nasync def softban(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):\r\n await dpys.admin.softban(inter, member, reason)\r\n```\r\n\r\n<br>\r\n\r\nUnban:\r\n\r\n```python\r\nasync def unban(inter: ApplicationCommandInteraction, member: typing.Union[str, int], msg: str = None) -> bool:\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"unban\")\r\n@commands.has_permissions(ban_members=True)\r\nasync def unban(inter, member: string = commands.Param()):\r\n await dpys.admin.unban(inter, member)\r\n```\r\n\r\n<br>\r\n\r\nMute:\r\n\r\n```python\r\nasync def mute(inter: disnake.ApplicationCommandInteraction, member: disnake.Member, role_add: int,\r\n role_remove: typing.Optional[int] = None, reason: str = None, msg: str = None) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"mute\")\r\nasync def mute(inter, member: disnake.Member = commands.Param(), reason: str = commands.Param(default=None)):\r\n await dpys.admin.mute(inter, member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE_ID, reason=reason)\r\n```\r\n\r\n<br>\r\n\r\nUnmute:\r\n\r\n```python\r\nasync def unmute(inter: disnake.ApplicationCommandInteraction, member: disnake.Member, role_remove: int,\r\n role_add: typing.Optional[int] = None, msg: str = None) -> bool\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"unmute\")\r\nasync def unmute(inter, member: disnake.Member = commands.Param()):\r\n await dpys.admin.unmute(inter, member, MUTE_REMOVE_ROLE_ID, MUTE_ROLE_ID)\r\n```\r\n\r\n<br>\r\n\r\nClear:\r\n\r\n```python\r\nasync def clear(inter: disnake.ApplicationCommandInteraction, amount: typing.Optional[int] = 99999999999999999,\r\n msg: str = None) -> int\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"clear\")\r\nasync def clear(inter, amount: int = commands.Param(default=99999999999999999)):\r\n await dpys.admin.clear(inter, amount)\r\n```\r\n\r\n<br>\r\n\r\nTimeout:\r\n\r\n```python\r\nasync def timeout(inter: ApplicationCommandInteraction, member: discord.Member,\r\n duration: Union[float, datetime.timedelta] = None, until: datetime.datetime = None,\r\n reason: typing.Optional[str] = None, msg: str = None) -> None:\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"timeout\")\r\nasync def timeout(inter, seconds: int = commands.Param(), reason: str = commands.Param(None)):\r\n await dpys.admin.timeout(inter, duration=seconds, reason=reason)\r\n```\r\n\r\n<br>\r\n\r\n## mute_on_join Class\r\n\r\nAdd Member:\r\n\r\n```python\r\nasync def mute_add(guild: disnake.Guild, member: disnake.Member) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"mute\")\r\nasync def mute(inter, member: dicord.Member = commands.Param(), reason: str = commands.Param(default=None)):\r\n await dpys.admin.mute(inter, member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE_ID, reason)\r\n await dpys.mute_on_join.mute_add(inter.guild, member)\r\n```\r\n\r\n<br>\r\n\r\nRemove Member:\r\n\r\n```python\r\nasync def mute_remove(guild: disnake.Guild, member: disnake.Member) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"unmute\")\r\nasync def unmute(inter, member: dicord.Member = commands.Param()):\r\n await dpys.admin.unmute(inter, member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE_ID)\r\n await dpys.mute_on_join.mute_remove(inter.guild, member)\r\n```\r\n\r\n<br>\r\n\r\nMute On Join Event Listener:\r\n\r\n```python\r\nasync def mute_on_join(member: disnake.Member, role_add: int, role_remove: Optional[int] = None) -> None\r\n```\r\n\r\n```python\r\n@bot.listen(\"on_member_join\")\r\nasync def mute_on_join(member: disnake.Member):\r\n await dpys.mute_on_join.mute_on_join(member, MUTE_ROLE_ID, MUTE_REMOVE_ROLE)\r\n```\r\n\r\n<br>\r\n\r\nManual Unmute Check:\r\n\r\n```python\r\nasync def manual_unmute_check(after: disnake.Member, roleid: int) -> None\r\n```\r\n\r\n```python\r\nimport dpys\r\n\r\n\r\n@bot.listen(\"on_member_update\")\r\nasync def manual_unmute_check(before: disnake.Member, after: disnake.Member):\r\n await dpys.mute_on_join.manual_unmute_check(after, MUTE_ROLE_ID)\r\n```\r\n\r\n<br>\r\n\r\n## rr Class\r\n\r\nCommand:\r\n\r\n```python\r\nasync def command(inter: disnake.ApplicationCommandInteraction, emoji: str, role: str, title: str,\r\n description: str) -> None\r\n```\r\n\r\n```python\r\n# Don't type hint disnake.Role for the role parameter\r\n@bot.slash_command(name=\"rr\")\r\nasync def reactionrole(inter, emoji: str = commands.Param(), role: str = commands.Param(),\r\n title: str = commands.Param(), description: str = commands.Param()):\r\n await dpys.rr.command(inter, emoji, role, title, description)\r\n```\r\n\r\n<br>\r\n\r\nCommand To List Reaction Roles:\r\n\r\n```python\r\nasync def display(inter: ApplicationCommandInteraction) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"listrr\")\r\nasync def listrr(inter: disnake.ApplicationCommandInteraction):\r\n await dpys.rr.display(inter)\r\n```\r\n\r\n<br>\r\n\r\nOn Raw Reaction Add Event Listener:\r\n\r\n```python\r\nasync def add(payload: disnake.RawReactionActionEvent, bot: commands.Bot) -> None\r\n```\r\n\r\n```python\r\n@bot.listen('on_raw_reaction_add')\r\nasync def rr_add(payload: disnake.RawReactionActionEvent):\r\n await dpys.rr.add(payload, bot)\r\n```\r\n\r\n<br>\r\n\r\nOn Raw Reaction Remove Event Listener:\r\n\r\n```python\r\nasync def remove(payload: disnake.RawReactionActionEvent, bot: commands.Bot) -> None\r\n```\r\n\r\n```python\r\n@bot.listen('on_raw_reaction_remove')\r\nasync def rr_remove(payload: disnake.RawReactionActionEvent):\r\n await dpys.rr.remove(payload, bot)\r\n```\r\n\r\n<br>\r\n\r\nClear Reaction Role command:\r\n\r\n```python\r\nasync def clear_all(inter: disnake.ApplicationCommandInteraction) -> None\r\n\r\n\r\nasync def clear_one(inter: disnake.ApplicationCommandInteraction, message_id: int) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"rrclear\")\r\nasync def rrclear(inter, id: str = commands.Param()):\r\n if id.lower() == \"all\":\r\n await dpys.rr.clear_all(inter)\r\n else:\r\n await dpys.rr.clear_one(inter, id)\r\n```\r\n\r\n<br>\r\n\r\nEvent Listeners To Clear Reaction Role Data:\r\n\r\n```python\r\n@bot.listen(\"on_message_delete\")\r\nasync def rr_clear_on_message_delete(message: disnake.Message):\r\n await dpys.rr.clear_on_message_delete(message)\r\n\r\n\r\n@bot.listen(\"on_raw_bulk_message_delete\")\r\nasync def rr_clear_on_raw_bulk_message_delete(payload: disnake.RawBulkMessageDeleteEvent):\r\n await dpys.rr.clear_on_bulk_message_delete(payload)\r\n\r\n\r\n@bot.listen(\"on_channel_delete\")\r\nasync def rr_clear_on_channel_delete(channel: disnake.TextChannel):\r\n await dpys.rr.clear_on_channel_delete(channel)\r\n\r\n\r\n@bot.listen(\"on_thread_delete\")\r\nasync def rr_clear_on_thread_delete(thread: disnake.Thread):\r\n await dpys.rr.clear_on_thread_delete(thread)\r\n```\r\n\r\n<br>\r\n\r\n## warnings Class\r\n\r\nWarn:\r\n\r\n```python\r\nasync def warn(inter: ApplicationCommandInteraction, member: discord.Member,\r\n reason: typing.Optional[str] = None, expires: Optional[int] = -1) -> None:\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"warn\")\r\nasync def warn(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param(),\r\n reason: str = commands.Param(default=None)):\r\n # Warning will expire in 1 day\r\n await dpys.warnings.warn(inter, member, reason, time.now() + 86400)\r\n```\r\n\r\n<br>\r\n\r\nUnwarn:\r\n\r\n```python\r\nasync def unwarn(inter: disnake.ApplicationCommandInteraction, member, dir, number: typing.Union[int, str]) -> bool\r\n```\r\n\r\n```python\r\n# Pass in \"all\" as the number parameter to clear all warnings from a member\r\n@bot.slash_command(name=\"unwarn\")\r\nasync def unwarn(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param(),\r\n number: str = commands.Param(default=\"all\")):\r\n await dpys.warnings.unwarn(inter, member, number)\r\n```\r\n\r\n<br>\r\n\r\nPunish:\r\n\r\n```python\r\nasync def punish(inter: ApplicationCommandInteraction, member: discord.Member,\r\n punishments: typing.Mapping[int, Punishment],\r\n add_role: typing.Optional[int] = None, remove_role: typing.Optional[int] = None,\r\n before: Optional[\r\n Callable[[int, Punishment, discord.Member], Awaitable[Optional[Member]]]] = None) -> None:\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"warn\")\r\nasync def warn(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param(),\r\n reason: str = commands.Param(default=None)):\r\n await dpys.warnings.warn(inter, member, reason)\r\n # This will do nothing for the first 2 warnings, but on the third warning it will kick the member.\r\n # Valid punishments for dpys.warnings.Punishment are kick, ban, mute, temp_ban, temp_mute, timeout\r\n # If you want to mute you have to pass in you mute role id and an optional mute remove role id.\r\n # For temporary punishments, a duration parameter can be passed into the dpys.warnings.Punishment constructor.\r\n # This is the number of seconds that the punishment will last.\r\n await dpys.warnings.punish(inter, member,\r\n {3: dpys.warnings.Punishment(\"kick\")})\r\n```\r\n\r\n<br>\r\n\r\nIf you want to use temp_ban or temp_mute, then include this cog in your bot.\r\n\r\n```python\r\nfrom disnake.ext import commands, tasks\r\nimport dpys\r\n\r\nGET_MUTE_ROLE_ID = \"an async function that takes in a guild id and returns the id for your mute role\"\r\nGET_MUTE_REMOVE_ROLE_ID = \"an async function that takes in a guild id and returns the id for your mute remove role\"\r\n\r\n\r\nclass DpysLoops(commands.Cog):\r\n def __init__(self, bot):\r\n self.bot = bot\r\n self.dpys_tempmute_loop.start()\r\n self.dpys_tempban_loop.start()\r\n\r\n @tasks.loop(seconds=1)\r\n async def dpys_tempmute_loop(self):\r\n await dpys.warnings.temp_mute_loop(self.bot, GET_MUTE_ROLE_ID, GET_MUTE_REMOVE_ROLE_ID)\r\n\r\n @dpys_tempmute_loop.before_loop\r\n async def before_dpys_tempmute_loop(self):\r\n await self.bot.wait_until_ready()\r\n \r\n @tasks.loop(minutes=30)\r\n async def dpys_expire(self):\r\n await dpys.warnings.expire_loop()\r\n \r\n @dpys_expire.before_loop\r\n async def before_dpys_tempmute_loop(self):\r\n await self.bot.wait_until_ready()\r\n\r\n @tasks.loop(seconds=1)\r\n async def dpys_tempban_loop(self):\r\n await dpys.warnings.temp_ban_loop(self.bot)\r\n\r\n @dpys_tempban_loop.before_loop\r\n async def before_dpys_tempban_loop(self):\r\n await self.bot.wait_until_ready()\r\n\r\n\r\ndef setup(bot):\r\n bot.add_cog(DpysLoops(bot))\r\n```\r\n\r\n<br>\r\n\r\nWarnings:\r\n\r\n```python\r\nasync def warnings(inter: disnake.ApplicationCommandInteraction, member: disnake.Member, number: int = 0) -> None\r\n```\r\nThe number is what warning you want to see. Set it to 0 to see the 5 most recent warnings.\r\n```python\r\n@bot.slash_command(name=\"warnings\")\r\nasync def warnings(inter: disnake.ApplicationCommandInteraction, member: disnake.Member = commands.Param()):\r\n await dpys.warnings.warnings(inter, member)\r\n```\r\n\r\n<br>\r\n\r\n```\r\nwarnings_list(guild: int, member_id: int)\r\n```\r\nReturns the actual list of warnings for a member\r\n\r\n<br>\r\n\r\n## curse Class\r\n\r\nAdd Word:\r\n\r\n```python\r\nasync def add_banned_word(inter: disnake.ApplicationCommandInteraction, word: str) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"addword\")\r\nasync def add_word(inter: disnake.ApplicationCommandInteraction, curses: str = commands.Param()):\r\n await dpys.curse.add_banned_word(inter, curses)\r\n```\r\n\r\n<br>\r\n\r\nRemove Word:\r\n\r\n```python\r\nasync def remove_banned_word(inter: disnake.ApplicationCommandInteraction, word: str) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"removeword\")\r\nasync def remove_word(inter: disnake.ApplicationCommandInteraction, curses: str = commands.Param()):\r\n await dpys.curse.remove_banned_word(inter, curses)\r\n```\r\n\r\n<br>\r\n\r\nClear Words:\r\n\r\n```python\r\nasync def clear_words(inter: disnake.ApplicationCommandInteraction) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"clearwords\")\r\nasync def clear_words(inter: disnake.ApplicationCommandInteraction):\r\n await dpys.curse.clear_words(inter)\r\n```\r\n\r\n<br>\r\n\r\n## misc Class\r\n\r\nReload:\r\n\r\n```python\r\nasync def reload(inter: disnake.ApplicationCommandInteraction, bot: commands.Bot, cogs: typing.List[str]) -> None\r\n```\r\n\r\n```python\r\n@bot.slash_command(name=\"reload\")\r\nasync def reload(inter: disnake.ApplicationCommandInteraction):\r\n cogs = [\"cogs.admin\", \"cogs.fun\", \"cogs.misc\"]\r\n await dpys.misc.reload(inter, bot, cogs)\r\n```\r\n\r\n<br>\r\n\r\nClear DPYS Data On Guild Remove:\r\n\r\n```python\r\n@bot.listen(\"on_guild_remove\")\r\nasync def clear_dpys_data(guild: disnake.Guild):\r\n await dpys.misc.clear_data_on_guild_remove(guild)\r\n```\r\n\r\n\r\n\r\n\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A library to simplify discord.py",
"version": "5.6.3",
"project_urls": {
"Homepage": "https://jgltechnologies.com/dpys"
},
"split_keywords": [
"discord"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7cea6996f5da525f0169f731cee4501c051987333731d6984cc3167814e6e377",
"md5": "a2a9a4c18c3ab98513e85a00cb3d9ea8",
"sha256": "a09f447abafb887380b549a2c1ead05bfb56dcbaf3b52ab8abfea93f0eb2306e"
},
"downloads": -1,
"filename": "dpys-5.6.3.tar.gz",
"has_sig": false,
"md5_digest": "a2a9a4c18c3ab98513e85a00cb3d9ea8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19518,
"upload_time": "2024-12-27T23:05:03",
"upload_time_iso_8601": "2024-12-27T23:05:03.981667Z",
"url": "https://files.pythonhosted.org/packages/7c/ea/6996f5da525f0169f731cee4501c051987333731d6984cc3167814e6e377/dpys-5.6.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-27 23:05:03",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "dpys"
}