Compare commits
No commits in common. "e874b98896cccb465935275af002833a374065e9" and "4a65d8d07d462313d3a87b57212fdfd856b64ee1" have entirely different histories.
e874b98896
...
4a65d8d07d
12
README.md
12
README.md
|
@ -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
|
|
||||||
```
|
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue