Merge branch 'master' of mainpc.gl:gandc/irc_pc_info_bot

This commit is contained in:
GandC Snow committed 2021-10-21 21:14:10 +03:00
commit 482719780c
2 files changed
+31 -30

No files matched your search

+1
View File
@@ -0,0 +1 @@
.idea
+30 -30
View File
@@ -1,6 +1,8 @@
import irc.bot, subprocess import irc.bot, subprocess
import irc.strings import irc.strings
import psutil, platform import psutil, platform
from sys import argv
def get_size(bytes, suffix="B"): def get_size(bytes, suffix="B"):
factor = 1024 factor = 1024
@@ -9,6 +11,7 @@ def get_size(bytes, suffix="B"):
return f"{bytes:.2f}{unit}{suffix}" return f"{bytes:.2f}{unit}{suffix}"
bytes /= factor bytes /= factor
class TestBot(irc.bot.SingleServerIRCBot): class TestBot(irc.bot.SingleServerIRCBot):
def __init__(self, channel, nickname, server, port=6667): def __init__(self, channel, nickname, server, port=6667):
irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname) irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname)
@@ -29,37 +32,22 @@ class TestBot(irc.bot.SingleServerIRCBot):
self.do_command(e, a[1].strip()) self.do_command(e, a[1].strip())
return return
def do_command(self, e, cmd): def do_command(self, e, cmd):
nick = e.source.nick nick = e.source.nick
c = self.connection c = self.connection
if cmd == "stats":
for chname, chobj in self.channels.items():
c.notice(nick, "--- Channel statistics ---")
c.notice(nick, "Channel: " + chname)
users = sorted(chobj.users())
c.notice(nick, "Users: " + ", ".join(users))
opers = sorted(chobj.opers())
c.notice(nick, "Opers: " + ", ".join(opers))
voiced = sorted(chobj.voiced())
c.notice(nick, "Voiced: " + ", ".join(voiced))
if cmd.lower() == "uptime": if cmd.lower() == "uptime":
result = subprocess.run(["uptime"], stderr=subprocess.PIPE, stdout=subprocess.PIPE) result = subprocess.run(["uptime"], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
output = result.stdout.decode().strip() output = result.stdout.decode().strip()
#res = output[output.find('load average'):]
c.notice(nick, output) c.notice(nick, output)
if cmd.lower() == "uname": elif cmd.lower() == "uname":
# >>> print(f"Version: {uname.version}") # >>> print(f"Version: {uname.version}")
# Version: #1 SMP Debian 4.19.208-1 (2021-09-29) # Version: #1 SMP Debian 4.19.208-1 (2021-09-29)
uname = platform.uname() uname = platform.uname()
end = 'System name:' + uname.version end = 'System name:' + uname.version
c.notice(nick, end) c.notice(nick, end)
elif cmd.lower() == "ram":
if cmd.lower() == "ram":
svmem = psutil.virtual_memory() svmem = psutil.virtual_memory()
total = 'Total RAM:' + get_size(svmem.total) total = 'Total RAM:' + get_size(svmem.total)
used = 'Used Ram: ' + get_size(svmem.used) used = 'Used Ram: ' + get_size(svmem.used)
@@ -69,33 +57,45 @@ class TestBot(irc.bot.SingleServerIRCBot):
c.notice(nick, avail) c.notice(nick, avail)
c.notice(nick, used) c.notice(nick, used)
c.notice(nick, percentage) c.notice(nick, percentage)
if cmd.lower() == "cpu":
elif cmd.lower() == "cpu":
percent = psutil.cpu_percent() percent = psutil.cpu_percent()
end = 'CPU load: ' + str(percent) + '%' end = 'CPU load: {}%'.format(percent)
c.notice(nick, end) c.notice(nick, end)
if cmd.lower() == "network": elif cmd.lower() == "network":
if_addrs = psutil.net_if_addrs() if_addrs = psutil.net_if_addrs()
for interface_name, interface_addresses in if_addrs.items(): for interface_name, interface_addresses in if_addrs.items():
for address in interface_addresses:
#print(f"=== Interface: {interface_name} ===")
header = 'Interface: ' + interface_name header = 'Interface: ' + interface_name
c.notice(nick, header) c.notice(nick, header)
for address in interface_addresses:
if str(address.family) == 'AddressFamily.AF_INET': if str(address.family) == 'AddressFamily.AF_INET':
IP = 'IP Address:' + address.address ip = 'IP Address: ' + address.address
mask = 'Netmask: ' + address.netmask mask = 'Netmask: ' + address.netmask
c.notice(nick, IP) c.notice(nick, ' {} / {}'.format(ip, mask))
c.notice(nick, mask)
if cmd.lower() == "help": elif cmd.lower() == 'temp':
end = 'Available commands are: help, stats, uptime, ram, cpu, uname, network' temperatures = psutil.sensors_temperatures()
for name, device_temp in temperatures.items():
header = 'Device: ' + name
c.notice(nick, header)
for sensor in device_temp:
sensor_name = sensor.label
if not sensor_name: sensor_name = '<no name>'
c.notice(nick, ' Sensor name: {}, current: {}'.format(sensor_name, sensor.current))
elif cmd.lower() == "help":
end = 'Available commands are: help, uptime, ram, cpu, uname, network, temp'
c.notice(nick, end) c.notice(nick, end)
def main(): def main():
channel = '#main' if len(argv) != 4:
nickname = 'GandCStat' print('Usage: {} channel nickname server'.format(argv[0]))
server = '10.200.201.4' exit(1)
channel = argv[1]
nickname = argv[2]
server = argv[3]
bot = TestBot(channel, nickname, server) bot = TestBot(channel, nickname, server)
bot.start() bot.start()