summaryrefslogtreecommitdiffstats
path: root/classes/functions.py
diff options
context:
space:
mode:
Diffstat (limited to 'classes/functions.py')
-rw-r--r--classes/functions.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/classes/functions.py b/classes/functions.py
new file mode 100644
index 0000000..08d6146
--- /dev/null
+++ b/classes/functions.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# XEP-0072: Server Version
+class Version:
+ def __init__(self, version, msg, target):
+ self.version = version['software_version']['version']
+ self.os = version['software_version']['os']
+ self.name = version['software_version']['name']
+ self.nick = msg['mucnick']
+ self.message_type = msg['type']
+ self.target = target
+
+ def format_version(self):
+ if self.message_type == "groupchat":
+ text = "%s: %s is running %s version %s on %s" % (self.nick, self.target, self.name, self.version, self.os)
+ else:
+ text = "%s is running %s version %s on %s" % (self.target, self.name, self.version, self.os)
+
+ return text
+
+
+# XEP-0012: Last Activity
+class LastActivity:
+ """ query the server uptime of the specified domain, defined by XEP-0012 """
+ def __init__(self, last_activity, msg, target):
+ self.last_activity = last_activity
+ self.nick = msg['mucnick']
+ self.message_type = msg['type']
+ self.target = target
+
+ def format_values(self, granularity=4):
+ seconds = self.last_activity['last_activity']['seconds']
+ uptime = []
+ intervals = (
+ ('years', 31536000), # 60 * 60 * 24 * 365
+ ('weeks', 604800), # 60 * 60 * 24 * 7
+ ('days', 86400), # 60 * 60 * 24
+ ('hours', 3600), # 60 * 60
+ ('minutes', 60),
+ ('seconds', 1)
+ )
+ for name, count in intervals:
+ value = seconds // count
+ if value:
+ seconds -= value * count
+ if value == 1:
+ name = name.rstrip('s')
+ uptime.append("{} {}".format(value, name))
+ result = ' '.join(uptime[:granularity])
+
+ if self.message_type == "groupchat":
+ text = "%s: %s is running since %s" % (self.nick, self.target, result)
+ else:
+ text = "%s is running since %s" % (self.target, result)
+
+ return text
+
+
+# XEP-0157: Contact Addresses for XMPP Services
+class ContactInfo:
+ def __init__(self, contact, msg, target):
+ self.contact = contact
+ self.message = msg
+ self.target = target
+
+ def format_contact(self):
+ server_info = []
+ sep = ' , '
+ possible_vars = ['abuse-addresses',
+ 'admin-addresses',
+ 'feedback-addresses',
+ 'sales-addresses',
+ 'security-addresses',
+ 'support-addresses']
+
+ for field in self.contact['disco_info']['form']:
+ var = field['var']
+ if var in possible_vars:
+ field_value = field.get_value(convert=False)
+ value = sep.join(field_value) if isinstance(field_value, list) else field_value
+ server_info.append(' - %s: %s' % (var, value))
+
+ if server_info:
+ text = "contact addresses for %s are" % self.target
+ for count in range(server_info.__len__()):
+ text += "\n" + server_info[count]
+ else:
+ text = "%s has no contact addresses configured." % self.target
+
+ return text
+
+
+# class handeling XMPPError exeptions
+class HandleError:
+ def __init__(self, error, msg, key, target):
+ self.error = error
+ self.message = msg
+ self.key = key
+ self.target = target
+
+ def build_report(self):
+ condition = self.error.condition
+ keyword = self.key[1:]
+
+ text = "There was an error requesting " + self.target + '\'s ' + keyword + " : " + condition
+
+ return text