summaryrefslogtreecommitdiffstats
path: root/classes/functions.py
blob: a8ed35631cab34cbbe5a389d8761904ab75a7264 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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="target missing"):
		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