00001
00002
00003
00004
00005
00006
00007
00008 zsig_responses ?:= make_tree(.stricmp);
00009
00010
00011 class_responses ?:= make_tree(.stricmp);
00012 instance_responses ?:= make_tree(.stricmp);
00013
00014 func add_response(zsig, response)
00015 {
00016 insert_tree(zsig_responses, zsig, response);
00017 }
00018
00019 func Response(s) [p, zsig, response]
00020 {
00021 p = strstr(s, "::");
00022 if (!p) return output("Can't find :: separator.\n");
00023 strcpy(zsig = "", s, p - s);
00024 while (*zsig && zsig[strlen(zsig) - 1] == ' ')
00025 zsig[strlen(zsig) - 1] = 0;
00026 response = skipspaces(p + 2);
00027 add_response(zsig, response);
00028 }
00029
00030 func save_responses(fp)
00031 {
00032 traverse_tree(zsig_responses, .save_responses_internal, fp);
00033 }
00034
00035 func save_responses_internal(zsig, response, fp)
00036 {
00037 fprintf(fp, "add_response(%s, %s);\n", stringconst(zsig),
00038 stringconst(response));
00039 }
00040 add_to_hook(save_hook, .save_responses);
00041
00042 func note_zsig_responses(z, sig) [sigresponse, t]
00043 {
00044
00045
00046 sigresponse = find_tree(zsig_responses, sig);
00047 if (sigresponse && !z->personal)
00048 {
00049 t = table(sigresponse, time);
00050 if (stricmp(z->class, "message") == 0)
00051 insert_tree(instance_responses, z->instance, t);
00052 else
00053 insert_tree(class_responses, z->class, t);
00054 }
00055 }
00056
00057 func get_zsig_response(class, instance) [t]
00058 {
00059 if (class && *class && (stricmp(class,"message") != 0))
00060 t = find_tree(class_responses, class);
00061 else if (instance)
00062 t = find_tree(instance_responses, instance);
00063 if (t && time - t[1] <= 60)
00064 return t[0];
00065 return 0;
00066 }
00067
00068
00069 add_cmd("response", -1, .Response, "/response <zsig>::<response>");
00070