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