]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/mod-python.c
remove some debug chatter
[irc/evilnet/x3.git] / src / mod-python.c
index e95ec4c0b7e04612e39f7a6bdd1b52008584c550..94365dc3e23cf177e8670ec734ee4f813d9e8aa4 100644 (file)
  * - Some kind of system for getting needed binds bound automagicaly to make it easier
  *   to run peoples' scripts and mod-python in general.
  * - An interface to reading/writing data to x3.db. Maybe generic, or attached to account or channel reg records?
+
+ * basic startup for now:
+ * configure --enable-modules=python
+ * /msg o3 bind o3 py\ run *python.run
+ * /msg o3 bind o3 py\ reload *python.reload
+ * /msg o3 bind o3 py\ command *python.command
+
+ * example script bindings (for now)
+ * /msg o3 bind x3 hangman *modcmd.joiner
+ * /msg o3 bind x3 hangman\ start *python.command hangman start
+ * /msg o3 bind x3 hangman\ end *python.command hangman end
+ * /msg o3 bind x3 hangman\ guess *python.command hangman guess
  */
 
 static const struct message_entry msgtab[] = {
@@ -1226,6 +1238,28 @@ static PyObject* emb_log_register_type(UNUSED_ARG(PyObject *self), PyObject* arg
     return Py_BuildValue("O", PyCObject_FromVoidPtr(log, NULL));
 }
 
+PyDoc_STRVAR(emb_module_register__doc__, "registers a module");
+PyObject* emb_module_register(UNUSED_ARG(PyObject* self), PyObject* args) {
+    PyObject* pylog;
+    char const *name, *helpfile;
+    struct log_type* log;
+    struct module* mod;
+
+    if (!PyArg_ParseTuple(args, "sOs", &name, &pylog, &helpfile))
+        return NULL;
+
+    log = PyCObject_AsVoidPtr(pylog);
+
+    mod = module_register(name, log, helpfile, NULL);
+
+    if (mod == NULL) {
+        PyErr_SetString(PyExc_Exception, "unable to register module");
+        return NULL;
+    }
+
+    return Py_BuildValue("O", PyCObject_FromVoidPtr(mod, NULL));
+}
+
 static PyMethodDef EmbMethods[] = {
     /* Communication methods */
     {"dump", emb_dump, METH_VARARGS, emb_dump__doc__},
@@ -1259,6 +1293,8 @@ static PyMethodDef EmbMethods[] = {
     /* module registration methods */
     {"log_register_type", emb_log_register_type, METH_VARARGS,
         emb_log_register_type__doc__},
+    {"module_register", emb_module_register, METH_VARARGS,
+        emb_module_register__doc__},
 
     /* Information gathering methods */
     {"get_user", emb_get_user, METH_VARARGS, emb_get_user__doc__},
@@ -1996,10 +2032,10 @@ static void modpython_conf_read(void) {
     }
 
     str = database_get_data(conf_node, "scripts_dir", RECDB_QSTRING);
-    modpython_conf.scripts_dir = str ? str : "./";
+    modpython_conf.scripts_dir = strdup(str ? str : "./");
 
     str = database_get_data(conf_node, "main_module", RECDB_QSTRING);
-    modpython_conf.main_module = str ? str : "modpython";
+    modpython_conf.main_module = strdup(str ? str : "modpython");
 }
 
 int python_init(void) {
@@ -2007,7 +2043,7 @@ int python_init(void) {
        do all our setup tasks and bindings 
     */
 
-    PY_LOG = log_register_type("Python", "file:python.log");
+    //PY_LOG = log_register_type("Python", "file:python.log");
     python_module = module_register("python", PY_LOG, "mod-python.help", NULL);
     conf_register_reload(modpython_conf_read);
 
@@ -2024,7 +2060,7 @@ int python_init(void) {
 */
     modcmd_register(python_module, "reload",  cmd_reload,  1,  MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
     modcmd_register(python_module, "run",  cmd_run,  2,  MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
-    modcmd_register(python_module, "command", cmd_command, 3, MODCMD_REQUIRE_STAFF, NULL);
+//    modcmd_register(python_module, "command", cmd_command, 3, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
 
 //  Please help us by implementing any of the callbacks listed as TODO below. They already exist
 //  in x3, they just need handle_ bridges implemented. (see python_handle_join for an example)