Skip to content

Instantly share code, notes, and snippets.

@ioistired
Forked from EvieePy/bot_example.py
Last active September 9, 2019 20:13
Show Gist options
  • Save ioistired/0fd55f5053739972fd6263260b336fb7 to your computer and use it in GitHub Desktop.
Save ioistired/0fd55f5053739972fd6263260b336fb7 to your computer and use it in GitHub Desktop.
A Cogs Example for the rewrite version of - discord.py
import discord
from discord.ext import commands
import sys, traceback
"""This is a multi file example showcasing many features of the command extension and the use of cogs.
These are examples only and are not intended to be used as a fully functioning bot. Rather they should give you a basic
understanding and platform for creating your own bot.
These examples make use of Python 3.6+ and the 1.0.0 version on the lib.
Discord.py Documentation:
https://discordpy.readthedocs.io/en/latest/index.html
Discord.py Commands Documentation:
https://discordpy.readthedocs.io/en/latest/ext/commands/index.html
Familiarising yourself with the documentation will greatly help you in creating your bot and using cogs.
"""
# Below cogs represents our folder our cogs are in. Following is the file name. So 'meme.py' in cogs, would be cogs.meme
# Think of it like a dot path import
initial_extensions = ['cogs.simple',
'cogs.members',
'cogs.owner']
bot = commands.Bot(command_prefix=commands.when_mentioned, description='A Rewrite Cog Example')
# Here we load our extensions(cogs) listed above in [initial_extensions].
if __name__ == '__main__':
for extension in initial_extensions:
bot.load_extension(extension)
bot.run('TOKEN')
import discord
from discord.ext import commands
class MembersCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.command()
@commands.guild_only()
async def joined(self, ctx, *, member: discord.Member):
"""Says when a member joined."""
await ctx.send(f'{member.display_name} joined on {member.joined_at}')
@commands.command(name='coolbot')
async def cool_bot(self, ctx):
"""Is the bot cool?"""
await ctx.send('This bot is cool. :)')
@commands.command(name='top_role', aliases=['toprole'])
@commands.guild_only()
async def show_toprole(self, ctx, *, member: discord.Member=None):
"""Simple command which shows the members Top Role."""
if member is None:
member = ctx.author
await ctx.send(f'The top role for {member.display_name} is {member.top_role.name}')
@commands.command(name='perms', aliases=['perms_for', 'permissions'])
@commands.guild_only()
async def check_permissions(self, ctx, *, member: discord.Member=None):
"""A simple command which checks a members Guild Permissions.
If member is not provided, the author will be checked."""
if not member:
member = ctx.author
# Here we check if the value of each permission is True.
perms = '\n'.join(perm for perm, value in member.guild_permissions if value)
# And to make it look nice, we wrap it in an Embed.
embed = discord.Embed(title='Permissions for:', description=ctx.guild.name, colour=member.colour)
embed.set_author(icon_url=member.avatar_url, name=str(member))
# \uFEFF is a Zero-Width Space, which basically allows us to have an empty field name.
embed.add_field(name='\uFEFF', value=perms)
await ctx.send(content=None, embed=embed)
# Thanks to Gio for the Command.
# The setup fucntion below is neccesarry. Remember we give bot.add_cog() the name of the class in this case MembersCog.
# When we load the cog, we use the name of the file.
def setup(bot):
bot.add_cog(MembersCog(bot))
from discord.ext import commands
class OwnerCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Hidden means it won't show up on the default help.
@commands.command(name='load', hidden=True)
@commands.is_owner()
async def load_cog(self, ctx, *, cog: str):
"""Command which Loads a Module.
Remember to use dot path. e.g: cogs.owner"""
try:
self.bot.load_extension(cog)
except Exception as e:
await ctx.send(f'**`ERROR:`** {type(e).__name__} - {e}')
else:
await ctx.send('**`SUCCESS`**')
@commands.command(name='unload', hidden=True)
@commands.is_owner()
async def unload_cog(self, ctx, *, cog: str):
"""Command which Unloads a Module.
Remember to use dot path. e.g: cogs.owner"""
try:
self.bot.unload_extension(cog)
except Exception as e:
await ctx.send(f'**`ERROR:`** {type(e).__name__} - {e}')
else:
await ctx.send('**`SUCCESS`**')
@commands.command(name='reload', hidden=True)
@commands.is_owner()
async def reload_cog(self, ctx, *, cog: str):
"""Command which Reloads a Module.
Remember to use dot path. e.g: cogs.owner"""
try:
self.bot.unload_extension(cog)
self.bot.load_extension(cog)
except Exception as e:
await ctx.send(f'**`ERROR:`** {type(e).__name__} - {e}')
else:
await ctx.send('**`SUCCESS`**')
def setup(bot):
bot.add_cog(OwnerCog(bot))
import discord
from discord.ext import commands
"""A simple cog example with simple commands. Showcased here are some check decorators, and the use of events in cogs.
For a list of inbuilt checks:
https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#checks
You could also create your own custom checks. Check out:
https://discordpy.readthedocs.io/en/latest/ext/commands/commands.html#checks
For a list of events:
https://discordpy.readthedocs.io/en/latest/api.html#event-reference
https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#event-reference
"""
class SimpleCog(commands.Cog):
"""SimpleCog"""
def __init__(self, bot):
self.bot = bot
@commands.command(name='repeat', aliases=['copy', 'mimic'])
async def do_repeat(self, ctx, *, our_input: str):
"""A simple command which repeats our input.
In rewrite Context is automatically passed to our commands as the first argument after self."""
await ctx.send(our_input)
@commands.command(name='add', aliases=['plus'])
@commands.guild_only()
async def do_addition(self, ctx, first: int, second: int):
"""A simple command which does addition on two integer values."""
total = first + second
await ctx.send(f'The sum of **{first}** and **{second}** is **{total}**')
@commands.command(name='me')
@commands.is_owner()
async def only_me(self, ctx):
"""A simple command which only responds to the owner of the bot."""
await ctx.send(f'Hello {ctx.author.mention}. This command can only be used by you!!')
@commands.command(name='embeds')
@commands.guild_only()
async def example_embed(self, ctx):
"""A simple command which showcases the use of embeds.
Have a play around and visit the Visualizer."""
embed = discord.Embed(title='Example Embed',
description='Showcasing the use of Embeds...\nSee the visualizer for more info.',
colour=0x98FB98)
embed.set_author(name='MysterialPy',
url='https://gist.github.com/MysterialPy/public',
icon_url='http://i.imgur.com/ko5A30P.png')
embed.set_image(url='https://cdn.discordapp.com/attachments/84319995256905728/252292324967710721/embed.png')
embed.add_field(name='Embed Visualizer', value='[Click Here!](https://leovoel.github.io/embed-visualizer/)')
embed.add_field(name='Command Invoker', value=ctx.author.mention)
embed.set_footer(text='Made in Python with discord.py@rewrite', icon_url='http://i.imgur.com/5BFecvA.png')
await ctx.send(content='**A simple Embed for discord.py@rewrite in cogs.**', embed=embed)
@commands.Cog.listener()
async def on_member_ban(self, guild, user):
"""Event Listener which is called when a user is banned from the guild.
For this example I will keep things simple and just print some info.
Notice how because we are in a cog class we do not need to use @bot.event
For more information:
http://discordpy.readthedocs.io/en/rewrite/api.html#discord.on_member_ban
Check above for a list of events.
"""
print(f'{user.name}-{user.id} was banned from {guild.name}-{guild.id}')
# The setup fucntion below is neccesarry. Remember we give bot.add_cog() the name of the class in this case SimpleCog.
# When we load the cog, we use the name of the file.
def setup(bot):
bot.add_cog(SimpleCog(bot))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment