An IRC bot written in python for paging someone over e*cityruf using mail.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

162 lines
5.3 KiB

#!/usr/bin/env python
# Author: Bandie Yip Kojote for TTYgap
# License: GNU-GPLv3
# Year: 2016
#
# Software is provided AS IS and so on.
# The responsible being. (Nickname)
OWNERNAME = "melli17"
# Host of the IRC server
HOST = "irc.example.com"
# TLS port of the IRC server
PORT = 6697
# Nick of the bot
NICK = "PagerBot"
# Ident of the bot
IDENT = "PagerBot"
# Realname of the bot
REALNAME = "https://github.com/TTYgap/PagerBot/"
# Channel which should be joined
CHAN = "#supercoolchan"
# Ask the IRC network administrator what the ping frequency is. Take that and add +5
timeout = 125
# Mail address you're sending from
FROM = "ircbot@example.com"
import sys
import socket
import string
import ssl
import time
import smtplib
phonebook = {}
# CONFIGURE YOUR USERS HERE
# phonebook["someone"] = "123456"
# phonebook["someoneelse"] = "7654321"
def page(receiver, text, user, urgent):
if receiver in phonebook:
number = phonebook[receiver]
else:
return "This user doesn't exist in the phonebook."
to = number + "@ecityruf.de"
if(urgent):
message = "U " + HOST + ":" + user + ":" + text
else:
message = HOST + ":" + user + ":" + text
if(len(message) > 80):
return "The message \"%s\" is too big. It has to be less than 80 characters." % (message)
m = smtplib.SMTP('smtpgw3.emessage.de')
try:
m.sendmail(FROM, to, "FROM: %s\nTO: %s\nSUBJECT: %s" %
(FROM, to, message))
except:
e = sys.exc_info()[0]
return "Error: %s" % e
m.quit()
return "Sent: \"%s\"" % (message)
readbuffer = ""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
ircsock = ssl.wrap_socket(s)
ircsock.send("NICK %s\r\n" % (NICK))
ircsock.send("USER %s %s no :%s\r\n" % (IDENT, HOST, REALNAME))
time.sleep(2)
ircsock.send("MODE %s +B\r\n" % (NICK))
ircsock.send("JOIN %s\r\n" % (CHAN))
print("OK - Connected to %s:%s\n" % (HOST, PORT))
last_ping = time.time()
while 1:
readbuffer = readbuffer + ircsock.recv(1024)
temp = string.split(readbuffer, "\n")
readbuffer = temp.pop()
pagingtext = ""
urgence = False
if (time.time() - last_ping) > timeout:
raise Exception("PING timeout")
for line in temp:
line = string.rstrip(line)
line = string.split(line)
if(line[0] == "PING"):
ircsock.send("PONG %s\r\n" % line[1])
last_ping = time.time()
if(line[1] == "PRIVMSG"):
un = string.split(line[0], "!")
un2 = string.split(un[0], ":")
usernick = un2[1]
if("#" in line[2]):
if(line[3] == ":%s:" % (NICK) or line[3] == ":&pager"):
ircsock.send(
"PRIVMSG %s %s: I only do stuff via query. Try \"/msg %s help\".\r\n" % (line[2], usernick, NICK))
if("#" not in line[2]):
if(line[3].lower() == ":help"):
ircsock.send(
"PRIVMSG %s This is a bot to use a paging service.\r\n" % (usernick))
time.sleep(0.5)
ircsock.send(
"PRIVMSG %s Use \"/msg %s &phonebook\" to list all beings in the phonebook.\r\n" % (usernick, NICK))
time.sleep(0.5)
ircsock.send(
"PRIVMSG %s Use \"/msg %s &pager (urgent) <Username> <Message>\" to page someone.\r\n" % (usernick, NICK))
time.sleep(0.2)
ircsock.send(
"PRIVMSG %s Examples:\r\n" % (usernick))
time.sleep(0.2)
ircsock.send(
"PRIVMSG %s \t/msg %s &pager melli17 This is a not so urgent message.\r\n" % (usernick, NICK))
time.sleep(0.2)
ircsock.send(
"PRIVMSG %s \t/msg %s &pager urgent melli17 This is an urgent message!\r\n" % (usernick, NICK))
time.sleep(0.5)
ircsock.send(
"PRIVMSG %s Call %s if you want to add yourself to the pager phonebook.\r\n" % (usernick, OWNERNAME))
elif(line[3].lower() == ":&pager"):
if(line[4].lower() == "urgent"):
urgence = True
pagingtext = ' '.join(line[6:])
print("%s tries to send %s to \"%s\" in URGENCE.\n" %
(usernick, line[5], pagingtext))
ircsock.send("PRIVMSG %s %s\r\n" %
(usernick, page(line[5], pagingtext, usernick, urgence)))
else:
pagingtext = ' '.join(line[5:])
print("%s tries to send to %s \"%s\"\n" %
(usernick, line[4], pagingtext))
ircsock.send("PRIVMSG %s %s\r\n" %
(usernick, page(line[4], pagingtext, usernick, urgence)))
elif(line[3].lower() == ":&phonebook"):
ircsock.send("PRIVMSG %s %s\r\n" %
(usernick, phonebook.keys()))
else:
ircsock.send("PRIVMSG %s Unknown command. Type \"/msg %s help\" for more information.\r\n" %
(usernick, NICK))
# print(line)