From 1fd87ad0cab5d45602192c83681340d5da27a6db Mon Sep 17 00:00:00 2001 From: Xua <17090652+XuaTheGrate@users.noreply.github.com> Date: Thu, 23 Jan 2020 19:25:04 +1300 Subject: [PATCH] Add example on subclassing commands.Context --- examples/custom_context.py | 51 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 examples/custom_context.py diff --git a/examples/custom_context.py b/examples/custom_context.py new file mode 100644 index 000000000..bc2a174db --- /dev/null +++ b/examples/custom_context.py @@ -0,0 +1,51 @@ +import random + +import discord +from discord.ext import commands + + +class MyContext(commands.Context): + async def tick(self, value): + # reacts to the message with an emoji + # depending on whether value is True or False + # if its True, it'll add a green check mark + # otherwise, it'll add a red cross mark + emoji = '\N{WHITE HEAVY CHECK MARK}' if value else '\N{CROSS MARK}' + try: + # this will react to the command author's message + await self.message.add_reaction(emoji) + except discord.HTTPException: + # sometimes errors occur during this, for example + # maybe you dont have permission to do that + # we dont mind, so we can just ignore them + pass + + +class MyBot(commands.Bot): + async def get_context(self, message, *, cls=MyContext): + # when you override this method, you pass your new Context + # subclass to the super() method, which tells the bot to + # use the new MyContext class + return await super().get_context(message, cls=cls) + + +bot = MyBot(command_prefix='!') + +@bot.command() +async def guess(ctx, number: int): + """ Guess a random number from 1 to 6. """ + # explained in a previous example, this gives you + # a random number from 1-6 + value = random.randint(1, 6) + # with your new helper function, you can add a + # green check mark if the guess was correct, + # or a red cross mark if it wasnt + await ctx.tick(number == value) + +# important: you shouldnt hard code your token +# these are very important, and leaking them can +# let people do very malicious things with your +# bot. try to use a file or something to keep +# them private, and dont commit it to GitHub +token = "your token here" +bot.run(token)