Compare commits
10
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
695d122339 | ||
|
|
41fe31f477 | ||
|
|
994a5425da | ||
|
|
3f8cc40ac0 | ||
|
|
f7f44d5556 | ||
|
|
6abf4de124 | ||
|
|
cb6eb51c1e | ||
|
|
7c5ba8d332 | ||
|
|
c14fa3e2d7 | ||
|
|
312aa354f6 |
No files matched your search
@@ -1,6 +1,6 @@
|
|||||||
Info bot
|
Info bot
|
||||||
========
|
========
|
||||||
Statbot -- это irc бот, который может рассказать вам о загруженности вашего пк.
|
Statbot -- это irc бот, который может рассказать вам о загруженности вашего пк или сервера.
|
||||||
|
|
||||||
|
|
||||||
installing
|
installing
|
||||||
@@ -13,9 +13,9 @@ pip3 install irc psutil
|
|||||||
Using
|
Using
|
||||||
-----
|
-----
|
||||||
```bash
|
```bash
|
||||||
python3 bot.py
|
python3 bot.py '#main' GandC_cenral_bot s1.tomas.gl
|
||||||
```
|
```
|
||||||
|
|
||||||
Commands
|
Commands
|
||||||
--------
|
--------
|
||||||
Всего доступно 7 команд: help, stats, uptime, ram, cpu, uname, network. По желанию вы можете добавить свои.
|
Всего доступно 8 команд: help, uptime, ram, cpu, uname, network, temp, stop. По желанию вы можете добавить свои.
|
||||||
@@ -3,6 +3,11 @@ import irc.strings
|
|||||||
import psutil, platform
|
import psutil, platform
|
||||||
from sys import argv
|
from sys import argv
|
||||||
|
|
||||||
|
channel = argv[1]
|
||||||
|
nickname = argv[2]
|
||||||
|
server = argv[3]
|
||||||
|
if len(argv) !=4:
|
||||||
|
print('Usage: {} channel nickname server'.format(argv[0]))
|
||||||
|
|
||||||
def get_size(bytes, suffix="B"):
|
def get_size(bytes, suffix="B"):
|
||||||
factor = 1024
|
factor = 1024
|
||||||
@@ -16,6 +21,10 @@ 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)
|
||||||
self.channel = channel
|
self.channel = channel
|
||||||
|
self.connection.add_global_handler('disconnect', self.on_disconnect)
|
||||||
|
|
||||||
|
def on_disconnect(self, connection, event):
|
||||||
|
exit(1)
|
||||||
|
|
||||||
def on_welcome(self, c, e):
|
def on_welcome(self, c, e):
|
||||||
c.mode(self._nickname, '+B')
|
c.mode(self._nickname, '+B')
|
||||||
@@ -33,19 +42,17 @@ class TestBot(irc.bot.SingleServerIRCBot):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def do_command(self, e, cmd):
|
def do_command(self, e, cmd):
|
||||||
nick = e.source.nick
|
#nick = e.source.nick ## Uncomment when need to send to user not channel
|
||||||
c = self.connection
|
c = self.connection
|
||||||
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()
|
||||||
c.notice(nick, output)
|
c.privmsg(channel, output)
|
||||||
|
|
||||||
elif cmd.lower() == "uname":
|
elif cmd.lower() == "uname":
|
||||||
# >>> print(f"Version: {uname.version}")
|
|
||||||
# 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.privmsg(channel, end)
|
||||||
|
|
||||||
elif cmd.lower() == "ram":
|
elif cmd.lower() == "ram":
|
||||||
svmem = psutil.virtual_memory()
|
svmem = psutil.virtual_memory()
|
||||||
@@ -53,52 +60,47 @@ class TestBot(irc.bot.SingleServerIRCBot):
|
|||||||
used = 'Used Ram: ' + get_size(svmem.used)
|
used = 'Used Ram: ' + get_size(svmem.used)
|
||||||
percentage = 'Percent:' + str(svmem.percent) + '%'
|
percentage = 'Percent:' + str(svmem.percent) + '%'
|
||||||
avail = 'Available:' + get_size(svmem.available)
|
avail = 'Available:' + get_size(svmem.available)
|
||||||
c.notice(nick, total)
|
c.privmsg(channel, total)
|
||||||
c.notice(nick, avail)
|
c.privmsg(channel, avail)
|
||||||
c.notice(nick, used)
|
c.privmsg(channel, used)
|
||||||
c.notice(nick, percentage)
|
c.privmsg(channel, percentage)
|
||||||
|
|
||||||
elif cmd.lower() == "cpu":
|
elif cmd.lower() == "cpu":
|
||||||
percent = psutil.cpu_percent()
|
percent = psutil.cpu_percent()
|
||||||
end = 'CPU load: {}%'.format(percent)
|
end = 'CPU load: {}%'.format(percent)
|
||||||
c.notice(nick, end)
|
c.privmsg(channel, end)
|
||||||
|
|
||||||
elif 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():
|
||||||
header = 'Interface: ' + interface_name
|
header = 'Interface: ' + interface_name
|
||||||
c.notice(nick, header)
|
c.privmsg(channel, header)
|
||||||
for address in interface_addresses:
|
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, ' {} / {}'.format(ip, mask))
|
c.privmsg(channel, ' {} / {}'.format(ip, mask))
|
||||||
|
|
||||||
elif cmd.lower() == 'temp':
|
elif cmd.lower() == 'temp':
|
||||||
temperatures = psutil.sensors_temperatures()
|
temperatures = psutil.sensors_temperatures()
|
||||||
for name, device_temp in temperatures.items():
|
for name, device_temp in temperatures.items():
|
||||||
header = 'Device: ' + name
|
header = 'Device: ' + name
|
||||||
c.notice(nick, header)
|
c.privmsg(channel, header)
|
||||||
for sensor in device_temp:
|
for sensor in device_temp:
|
||||||
sensor_name = sensor.label
|
sensor_name = sensor.label
|
||||||
if not sensor_name: sensor_name = '<no name>'
|
if not sensor_name: sensor_name = '<no name>'
|
||||||
c.notice(nick, ' Sensor name: {}, current: {}'.format(sensor_name, sensor.current))
|
c.privmsg(channel, ' Sensor name: {}, current: {}'.format(sensor_name, sensor.current))
|
||||||
|
|
||||||
elif cmd.lower() == "help":
|
elif cmd.lower() == "help":
|
||||||
end = 'Available commands are: help, uptime, ram, cpu, uname, network, temp'
|
end = 'Available commands are: help, uptime, ram, cpu, uname, network, temp'
|
||||||
c.notice(nick, end)
|
c.privmsg(channel, end)
|
||||||
|
|
||||||
|
elif cmd.lower() == "stop":
|
||||||
|
exit(1)
|
||||||
else:
|
else:
|
||||||
end = 'Unknow command. Sorry'
|
end = 'Unknow command. Sorry'
|
||||||
c.notice(nick, end)
|
c.privmsg(channel, end)
|
||||||
def main():
|
def main():
|
||||||
# print(argv)
|
|
||||||
if len(argv) != 4:
|
|
||||||
print('Usage: {} channel nickname server'.format(argv[0]))
|
|
||||||
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()
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user