summaryrefslogtreecommitdiff
path: root/game/irc.rpy
diff options
context:
space:
mode:
Diffstat (limited to 'game/irc.rpy')
-rw-r--r--game/irc.rpy223
1 files changed, 0 insertions, 223 deletions
diff --git a/game/irc.rpy b/game/irc.rpy
deleted file mode 100644
index 23d5f2c..0000000
--- a/game/irc.rpy
+++ /dev/null
@@ -1,223 +0,0 @@
-#################################################################################
-# This file is part of Spheres.
-# Copyright (C) 2019 Jesusalva
-
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#################################################################################
-# Chat controller
-# TODO: Pub interface, using irc_send() and irc_buffer
-
-init python:
- irc=None
- irc_online=False
-
- def irc_open():
- if persistent.irc_disable:
- return
-
- global irc, irc_buffer, irc_nick, irc_auth, irc_channel, irc_online
- import socket, sys, random
-
- reload(sys)
- sys.setdefaultencoding('utf8')
-
- irc_online=False
- server = "irc.freenode.org"
- irc_channel = "#tmw2-spheres"
- irc_nick = "GS_" + get_token()[:3] + str(random.randint(1, 10000))
- irc_auth=IRC_AUTH_NONE
- irc_buffer=[]
- irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- stdout("\nConnecting to:" + server)
- irc.connect((server, 6667))
- return
-
- def irc_receive(raw):
- global irc_buffer
- sender="IRC"
-
- # Control buffer length
- if (len(irc_buffer) >= MAX_IRC_BUFFER):
- nil=irc_buffer.pop(0)
- del nil
-
- # Find sender if not supplied
- try:
- p1=raw.find('<')+1
- p2=raw.find('>')
- if p2 <= p1:
- raise Exception("Invalid sender")
- sender=raw[p1:p2]
- except:
- try:
- p1=raw.find("!")
- sender="IRC."+raw[1:p1]
- except:
- sender="IRC"
-
- # Extract message
- try:
- p1=raw.find(" :") # Perhaps we're looking for ">" instead
- msg=raw[p1:]
- except:
- msg="Unparseable"
-
- # UNIX format
- msg=msg.replace('\r', '')
- irc_buffer.append((sender, msg))
- return
-
- def irc_send(sender, msg):
- global irc, irc_channel, irc_online
- if not irc_online:
- return False
- try:
- irc.send("PRIVMSG %s :<%s> %s\n" % (irc_channel, sender, msg))
- irc_buffer.append((sender, msg))
- return True
- except:
- return False
-
- def irc_kill():
- global irc, irc_online
- if irc_online:
- irc.send("QUIT :I have to go for now!\n")
- stdout("[IRC] Closing connection normally...")
- irc.shutdown(2)
- irc.close()
- irc_online=False
- stdout("[IRC] IRC Bridge is now Offline.")
- #del irc
- irc=None
- return
-
- def irc_loop():
- if persistent.irc_disable:
- return
-
- global irc, irc_buffer, irc_nick, irc_auth, irc_channel, irc_online
-
- if irc is None:
- irc_open()
-
- try:
- while 1:
- text = irc.recv(2048)
- if len(text) > 0:
- if debug:
- stdout("[IRC] %s" % text)
- else:
- continue
-
- # Handle ping requests
- if text.find("PING") != -1:
- irc.send("PONG " + text.split()[1] + "\n")
-
- # Authentication: Step 1
- if irc_auth == IRC_AUTH_NONE:
- irc.send("USER " + irc_nick + " " + irc_nick + " " + irc_nick + " :This is a fun bot\n")
- irc_auth=IRC_AUTH_USER
- continue
-
- # Authentication: Step 2
- if irc_auth == IRC_AUTH_USER:
- irc.send("NICK " + irc_nick + "\n")
- irc_auth=IRC_AUTH_NICK
- continue
-
- # Authentication: Step 3
- if text.find("255 " + irc_nick) != -1:
- irc.send("JOIN " + irc_channel + "\n")
-
- if text.find("376 " + irc_nick) != -1:
- if irc_auth == IRC_AUTH_NICK:
- irc_auth=IRC_AUTH_CHAN
- irc_online=True
- else:
- stdout("[IRC] Erroneous Authentication on 376 message")
- irc_online=True
-
- if irc_auth == IRC_AUTH_CHAN:
- # IRC Syntax
- # :nick!hostname PRIVMSG #tmw2-spheres :<nickname> msg
- # We should use <nickname>, not :nick!
-
- # TODO: Handle CTCP ACTION
- if text.find(irc_channel) != -1:
- if "PRIVMSG" in text:
- irc_receive(text)
-
- # Handle disconnections
- if not irc_online:
- raise Exception("Connection terminated.")
-
- finally:
- try:
- irc.send("QUIT :I have to go for now!\n")
- irc.shutdown(2)
- irc.close()
- except:
- stdout("[IRC] [ERROR] Connection was already closed.")
- stdout("\n")
- stdout("Closing IRC connection...")
- irc=None
-
- return
-
-screen pub():
- frame:
- background Frame("gui/frame.png", 0, 0)
- xalign 0.5
- yalign 0.5
- ymargin 15
- ypadding 10
- xmargin 10
- vbox:
- spacing 30
- textbutton _("Exit") action Return("")
- label _("PUB RAID - NOT YET IMPLEMENTED")
- null height 20
- viewport:
- #child_size (0.4, 0.8)
- mousewheel True
- draggable True
- arrowkeys True
- xfill False
- scrollbars "vertical"
-
- vbox:
- xalign 0.5
- spacing 5
- label _("%s" % persistent.nickname)
- null height 40
-
- showif irc_online:
- for chat in irc_buffer:
- label _("%s: {size=22}%s{/size}" % (chat[0], chat[1].replace("<%s>" % chat[0], "")))
-
- null height 40
- input:
- id "msgmsg"
- color ((128, 128, 128, 220))
- italic True
- size 26
- copypaste True
- allow "qwertyuiopasdfghjklzxcvbnm QWERTYUIOPASDFGHJKKLZXCVBNM,.?!+-=:;'()"
- textbutton _("Send") action None
- else:
- label _("Connecting...")
-
- timer 1.0 action Function(renpy.restart_interaction) repeat True
-