Added decorator tests; fixed README typo
parent
d1dc46c17b
commit
beb5bf49cc
|
@ -1,6 +1,5 @@
|
||||||
# Changelog
|
## v0.1 (2020/08/26)
|
||||||
|
|
||||||
## 0.1 (2020/08/26)
|
|
||||||
### Added
|
### Added
|
||||||
- Prefix can now be passed as argument to init
|
- Prefix can now be passed as argument to init
|
||||||
- Pre-made help module
|
- Pre-made help module
|
||||||
|
|
22
README.md
22
README.md
|
@ -36,7 +36,7 @@ This first part shows the three important variables in any module.
|
||||||
With fr being the default prefix for Frank (can be overwritten). As you define more modules, they should all have a
|
With fr being the default prefix for Frank (can be overwritten). As you define more modules, they should all have a
|
||||||
unique prefix. This is how Frank's modular system works, and any modules added to the list will automatically be
|
unique prefix. This is how Frank's modular system works, and any modules added to the list will automatically be
|
||||||
picked up by Frank. The PREFIX value can also be list, allowing for multiple prefixes: for example a long,
|
picked up by Frank. The PREFIX value can also be list, allowing for multiple prefixes: for example a long,
|
||||||
description one, and a short, easy to type one (e.g. minecraft and mc).
|
descriptive one, and a short, easy to type one (e.g. minecraft and mc).
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def pre_start(self):
|
def pre_start(self):
|
||||||
|
@ -60,7 +60,7 @@ Frank.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@frank.default()
|
@frank.default()
|
||||||
async def default_cmd(self):
|
async def default_cmd(self, author, channel, mid):
|
||||||
# do some default action
|
# do some default action
|
||||||
pass
|
pass
|
||||||
```
|
```
|
||||||
|
@ -73,12 +73,24 @@ These three decorators are the bread and butter of Frank. Let's break them down:
|
||||||
fr examp command [ARGS]
|
fr examp command [ARGS]
|
||||||
```
|
```
|
||||||
This is how you can define as many Discord commands as you want, without needing to know how to parse the messages
|
This is how you can define as many Discord commands as you want, without needing to know how to parse the messages
|
||||||
etc. Each command gets the `author`, `channel`, and `id` of the message. The `cmd` variable contains all the arguments passed
|
etc. Each command gets the `author`, `channel`, and `id` of the message. The `cmd` variable contains all the
|
||||||
to the command.
|
arguments passed to the command.
|
||||||
- `frank.daemon` defines a daemon, a process that should run in the background for as long as the bot is active. It
|
- `frank.daemon` defines a daemon, a process that should run in the background for as long as the bot is active. It
|
||||||
should contain a while loop and preferably a sleep function using `asyncio.sleep()` (there are plans to improve this
|
should contain a while loop and preferably a sleep function using `asyncio.sleep()` (there are plans to improve this
|
||||||
behavior). Because a daemon is just a method of the module class, it has access to all class variables, including
|
behavior). Because a daemon is just a method of the module class, it has access to all class variables, including
|
||||||
those defined in `pre_start`.
|
those defined in `pre_start`.
|
||||||
- `frank.default` defines the command that should be run if the module is called without explicitely giving a command.
|
- `frank.default` defines the command that should be run if the module is called without explicitly giving a command.
|
||||||
For example, if you call `fr examp` without specifying a command, it will run the default command. This is useful for
|
For example, if you call `fr examp` without specifying a command, it will run the default command. This is useful for
|
||||||
making a command that's used very often easier to execute.
|
making a command that's used very often easier to execute.
|
||||||
|
|
||||||
|
In the end, all you need to do is add the following in your main script:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from frank import Frank
|
||||||
|
# Or whatever your package containing your modules is called
|
||||||
|
from modules import ExampleMod
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
client = Frank([ExampleMod])
|
||||||
|
client.run(YOUR_DISCORD_TOKEN)
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
# =====IMPORTS=====
|
||||||
|
# Own imports
|
||||||
|
from frank import default, command, daemon
|
||||||
|
|
||||||
|
|
||||||
|
class TestDecorators:
|
||||||
|
"""
|
||||||
|
This test makes sure the decorated functions return the same result as
|
||||||
|
their non-decorated counterparts
|
||||||
|
"""
|
||||||
|
|
||||||
|
def default_no_dec(self):
|
||||||
|
return 'default'
|
||||||
|
|
||||||
|
@default()
|
||||||
|
def default_dec(self):
|
||||||
|
return self.default_no_dec()
|
||||||
|
|
||||||
|
def command_no_dec(self):
|
||||||
|
return 'command'
|
||||||
|
|
||||||
|
@command('cmd')
|
||||||
|
def command_dec(self):
|
||||||
|
return self.command_no_dec()
|
||||||
|
|
||||||
|
def daemon_no_dec(self):
|
||||||
|
return 'daemon'
|
||||||
|
|
||||||
|
@daemon()
|
||||||
|
def daemon_dec(self):
|
||||||
|
return self.daemon_no_dec()
|
||||||
|
|
||||||
|
def test_default(self):
|
||||||
|
assert self.default_no_dec() == self.default_dec()
|
||||||
|
|
||||||
|
def test_command(self):
|
||||||
|
assert self.command_no_dec() == self.command_dec()
|
||||||
|
|
||||||
|
def test_daemon(self):
|
||||||
|
assert self.daemon_no_dec() == self.daemon_dec()
|
Reference in New Issue