Compare commits

..

No commits in common. "e874b98896cccb465935275af002833a374065e9" and "4a65d8d07d462313d3a87b57212fdfd856b64ee1" have entirely different histories.

2 changed files with 34 additions and 53 deletions

View File

@ -34,7 +34,6 @@ Firstly, you want to make a file called "meta.json" - it will let the module loa
"start_on_boot": true, # tells mod loader to start your module automatically; false by default "start_on_boot": true, # tells mod loader to start your module automatically; false by default
"version": 1, # this points to the specific version of modVM your code needs to run; 1 by default "version": 1, # this points to the specific version of modVM your code needs to run; 1 by default
"alias": "testapp" # adds an alias to your module which can be later specified in control commands "alias": "testapp" # adds an alias to your module which can be later specified in control commands
"predefine": "predefine.py" # locates your predefine code (it is being run only once on module load
} }
``` ```
@ -45,14 +44,5 @@ After that you can start writing your code in the index.py file; every code is d
- you can use modules already available to you (json, codecs); please, try to avoid importing unneccesary modules - you can use modules already available to you (json, codecs); please, try to avoid importing unneccesary modules
- if you need to access files amd folders in your module dicertory, you can easily do so by using self.path + "filename"; self.path always contains your current folder name - if you need to access files amd folders in your module dicertory, you can easily do so by using self.path + "filename"; self.path always contains your current folder name
- please, avoid using time.sleep() in any scenario; modules are syncronous, so usage of this method will stall the entire bot - please, avoid using time.sleep() in any scenario; modules are syncronous, so usage of this method will stall the entire bot
- in order to define persistent variables you can set them in your predefine file
If you want to submit your code, please check if it works by testing the output (see "testing" section below); if you want to submit the code for someone to do more work on it, you should set "start_on_boot" to "false" in meta.json file (the same should be done for testing/unstable modules) If you want to submit your code, please check if it works by running the bot and testing the output; if you want to submit the code for someone to do more work on it, you should set "start_on_boot" to "false" in meta.json file (the same should be done for testing/unstable modules)
## Testing modules locally
In order to test the modules/bot offline you can run the module-testing.py file - it behaves just like the bot, but allows you to enter any message, doesn't require Internet connection and bot token. This is a good way to test your modules before publishing them.
It can be used like this:
```
python3 module-testing.py
```

View File

@ -154,49 +154,40 @@ class ModuleControlUnit:
# synchronous message processor # synchronous message processor
def queue_processor(): def queue_processor():
while True: while True:
try: if len(message_queue) > 0:
if len(message_queue) > 0: msg = message_queue[0]
msg = message_queue[0] print("[DEBUG] queue_processor: {}".format(msg)) # debug
print("[DEBUG] queue_processor: {}".format(msg)) # debug
# check for control commands # check for control commands
if msg["chat"]["id"] == 575246355: if msg["chat"]["id"] == 575246355:
if msg["text"][0] == "$": if msg["text"][0] == "$":
command = msg["text"][1:].split(" ") command = msg["text"][1:].split(" ")
if len(command) >= 2 and command[0] == "module": if len(command) >= 2 and command[0] == "module":
if command[1] == "reload": if command[1] == "reload":
print("[INFO] Module reloading triggered by a command") print("[INFO] Module reloading triggered by a command")
del mcu.modules[:] del mcu.modules[:]
mcu.reload_modules() mcu.reload_modules()
del message_queue[0] del message_queue[0]
continue continue
# modules are used in here # modules are used in here
for mod in mcu.modules: for mod in mcu.modules:
if mod.enabled: if mod.enabled:
if mod.version == 1: if mod.version == 1:
responce = mod.process(msg) responce = mod.process(msg)
if len(responce) > 0: if len(responce) > 0:
updater.bot.send_message(chat_id = msg.chat.id, text = responce) #updater.bot.send_message(chat_id = msg.chat.id, text = responce)
print("Responded using module {} ({}) with text: {}".format(mod.path, mod.alias, responce)) print("Responded using module {} ({}) with text: {}".format(mod.path, mod.alias, responce))
break break
del message_queue[0] del message_queue[0]
else:
if STOP_REQUESTED:
break
else: else:
if STOP_REQUESTED: time.sleep(1)
break
else:
time.sleep(1)
except Exception as e:
print("[ERROR] queue_processor: current message queue: {}".format(message_queue))
print("[ERROR] queue_processor: error while processing message, trying to delete it...")
try:
del message_queue[0]
print("[INFO] queue_processor: deleted broken message from the queue")
except:
print("[WARN] queue_processor: message seems absent, whatever")
print("[INFO] queue_processor thread stops successfully") print("[INFO] queue_processor thread stops successfully")