Example #1
0
 def writeout(self):
     # Write to socket/server
     while True:
         try:
             (priority, sent, line) = self.output.get(True, 1)
         except Empty:
             if self.quitting:
                 break
             else:
                 continue
         try:
             while self.last + Config.getfloat("Connection", "antiflood") * (1 + (len(line) > 300) + (priority > 10)) >= time.time():
                 time.sleep(0.5)
             # Warn admins if the wait is too long
             if time.time() > sent + Config.getint("Connection", "maxdelay"):
                 if time.time() > self.wait_warned + 300:
                     self.wait_warned = time.time()
                     adminmsg("Message output message delay is too long: %.1f seconds" % (time.time() - sent))
             self.sock.send(encode(line) + CRLF)
             self.last = time.time()
             print "%s >>> %s" % (time.asctime(),encode(line),)
             self.output.task_done()
             if line[:4].upper() == "QUIT":
                 break
         except socket.error as exc:
             raise Reboot(exc)
Example #2
0
File: messages.py Project: JDD/DLR
 def parse(self, line):
     # Parse the irc line
     self.line = line
     self._nick = line.split("!")[0][1:]
     self._hostmask = line.split()[0][1:]
     self._command = line.split()[1]
     self._channel = ""
     
     # Channel
     try:
         chan = ":"+line.split(":")[1] # The ":" is added after the split etc, just to make the .find()s return the right result
         hash = max(chan.find("#"),0) or len(line)
         amp = max(chan.find("&"),0) or len(line)
         if not hash == amp: # There's no # or &, ie both lines returned len(line)
             self._channel = line[min(hash,amp):].split()[0]
         else: # This should almost certainly give the bot's nick
             self._channel = line.split()[2]
     except IndexError:
         self._chanerror = True
     
     # Encoding
     self._nick = encode(self._nick)
     self._hostmask = encode(self._hostmask)
     self._command = encode(self._command)
     self._channel = encode(self._channel)
     
     # Message
     try:
         self._msg = line[line.index(":",1)+1:]
     except ValueError:
         self._msgerror = True
Example #3
0
    def parse(self, line):
        # Parse the irc line
        self.line = line
        self._nick = line.split("!")[0][1:]
        self._hostmask = line.split()[0][1:]
        self._command = line.split()[1]
        self._channel = ""

        # Channel
        try:
            chan = ":" + line.split(
                ":"
            )[1]  # The ":" is added after the split etc, just to make the .find()s return the right result
            hash = max(chan.find("#"), 0) or len(line)
            amp = max(chan.find("&"), 0) or len(line)
            if not hash == amp:  # There's no # or &, ie both lines returned len(line)
                self._channel = line[min(hash, amp):].split()[0]
            else:  # This should almost certainly give the bot's nick
                self._channel = line.split()[2]
        except IndexError:
            self._chanerror = True

        # Encoding
        self._nick = encode(self._nick)
        self._hostmask = encode(self._hostmask)
        self._command = encode(self._command)
        self._channel = encode(self._channel)

        # Message
        try:
            self._msg = line[line.index(":", 1) + 1:]
        except ValueError:
            self._msgerror = True
Example #4
0
 def writeout(self):
     # Write to socket/server
     while True:
         try:
             (priority, sent, line) = self.output.get(True, 1)
         except Empty:
             if self.quitting:
                 break
             else:
                 continue
         try:
             while self.last + Config.getfloat(
                     "Connection",
                     "antiflood") * (1 + (len(line) > 300) +
                                     (priority > 10)) >= time.time():
                 time.sleep(0.5)
             # Warn admins if the wait is too long
             if priority < 10 and time.time() > sent + Config.getint(
                     "Connection", "maxdelay"):
                 if time.time() > self.wait_warned + 300:
                     self.wait_warned = time.time()
                     admin_msg(
                         "Message output message delay is too long: %.1f seconds"
                         % (time.time() - sent))
             self.sock.send(encode(line) + CRLF)
             self.last = time.time()
             print "%s >> %s" % (
                 time.strftime("%Y%m%d %H:%M:%S |"),
                 encode(line),
             )
             self.output.task_done()
             if line[:4].upper() == "QUIT":
                 break
         except socket.error as exc:
             raise Reboot(exc)
Example #5
0
 def write(self, line):
     # Write to socket/server
     try:
         ponging = self.pong.match(line)
         if ponging:
             self.sock.send(line + CRLF)
         else:
             while self.last + 1 >= time.time():
                 time.sleep(0.5)
             self.sock.send(encode(line) + CRLF)
             self.last = time.time()
             print "%s >>> %s" % (time.asctime(),encode(line),)
     except socket.error as exc:
         raise Reboot(exc)
Example #6
0
    def execute(self, message, user, params):

        rec = params.group(1)
        shortmsg = params.group(2) is not None
        public_text = params.group(3) + (' - %s' %
                                         (user.name, ) if not shortmsg else '')
        text = encode(public_text)
        receiver = User.load(name=rec, exact=False,
                             access="member") or User.load(name=rec)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec, ))
            return

        email = receiver.email
        if not email:
            message.reply(
                "That incompetent retard %s hasn't provided an address. Super secret message not sent."
                % (receiver.name, ))
            return

        error = ""

        error = self.send_email(user, receiver, public_text, email, text,
                                shortmsg)

        if error is None:
            message.reply("Successfully processed To: %s Message: %s" %
                          (receiver.name, decode(text)))
        else:
            message.reply(
                error or
                "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you."
            )
Example #7
0
File: maps.py Project: munin/merlin
 def __str__(self):
     ret = ""
     if self.nick:
         ret += " nick=%s" % (self.nick,)
     if self.alliance is not None:
         ret += " alliance=%s" % (self.alliance.name,)
     if self.fakenick:
         ret += " fakenick=%s" % (self.fakenick,)
     if self.defwhore:
         ret += " defwhore=%s" % (self.defwhore,)
     if self.covop:
         ret += " covop=%s" % (self.covop,)
     if self.scanner:
         ret += " scanner=%s" % (self.scanner,)
     if self.dists:
         ret += " dists=%s" % (self.dists,)
     if self.bg:
         ret += " bg=%s" % (self.bg,)
     if self.gov:
         ret += " gov=%s" % (self.gov,)
     if self.relay:
         ret += " relay=%s" % (self.relay,)
     if self.reportchan:
         ret += " reportchan=%s" % (self.reportchan,)
     if self.comment:
         ret += " comment=%s" % (self.comment,)
     return encode(ret)
     return ret
Example #8
0
File: maps.py Project: munin/merlin
 def __str__(self):
     retstr = "'%s' Members: %s (%s) " % (self.name, self.members, self.members_rank)
     retstr += "Score: %s (%s) Avg: %s (%s) " % (self.score, self.score_rank, self.score_avg, self.score_avg_rank)
     retstr += "Points: %s (%s) " % (self.points, self.points_rank)
     retstr += "Size: %s (%s) Avg: %s (%s)" % (self.size, self.size_rank, self.size_avg, self.size_avg_rank)
     return encode(retstr)
     return retstr
Example #9
0
 def __str__(self):
     # String representation of the Message object (Namely for debugging purposes)
     try:
         return "[%s] <%s> %s" % (self.get_chan(), self.get_nick(), encode(self.get_msg()))
         return "[%s] <%s> %s" % (self.get_chan(), self.get_nick(), self.get_msg())
     except ParseError:
         return ""
Example #10
0
    def execute(self, message, user, params):

        rec = params.group(1)
        shortmsg = params.group(2) is not None
        public_text = params.group(3) + (" - %s" % (user.name,) if not shortmsg else "")
        text = encode(public_text)
        receiver = User.load(name=rec, exact=False, access="member") or User.load(name=rec)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec,))
            return

        email = receiver.email
        if not email:
            message.reply(
                "That incompetent retard %s hasn't provided an address. Super secret message not sent."
                % (receiver.name,)
            )
            return

        error = ""

        error = self.send_email(user, receiver, public_text, email, text, shortmsg)

        if error is None:
            message.reply("Successfully processed To: %s Message: %s" % (receiver.name, decode(text)))
        else:
            message.reply(
                error
                or "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you."
            )
Example #11
0
 def __str__(self):
     # String representation of the Message object (Namely for debugging purposes)
     try:
         return "[%s] <%s> %s" % (self.get_chan(), self.get_nick(), encode(self.get_msg()))
         return "[%s] <%s> %s" % (self.get_chan(), self.get_nick(), self.get_msg())
     except ParseError:
         return ""
Example #12
0
File: maps.py Project: munin/merlin
 def __str__(self):
     retstr = "%s:%s '%s' (%s) " % (self.x, self.y, self.name, self.planet_loader.filter_by(active=True).count())
     retstr += "Score: %s (%s) " % (self.score, self.score_rank)
     retstr += "Value: %s (%s) " % (self.value, self.value_rank)
     retstr += "Size: %s (%s) " % (self.size, self.size_rank)
     retstr += "XP: %s (%s) " % (self.xp, self.xp_rank)
     return encode(retstr)
     return retstr
Example #13
0
 def write(self, line):
     # Write to socket/server
     try:
         ponging = self.pong.match(line)
         if ponging:
             self.sock.send(line + CRLF)
         else:
             while self.last + 1 >= time.time():
                 time.sleep(0.5)
             self.sock.send(encode(line) + CRLF)
             self.last = time.time()
             print "%s >>> %s" % (
                 time.asctime(),
                 encode(line),
             )
     except socket.error as exc:
         raise Reboot(exc)
Example #14
0
File: maps.py Project: munin/merlin
 def __str__(self):
     retstr = "%s:%s:%s (%s) '%s' of '%s' " % (self.x, self.y, self.z, self.race, self.rulername, self.planetname)
     retstr += "Score: %s (%s) " % (self.score, self.score_rank)
     retstr += "Value: %s (%s) " % (self.value, self.value_rank)
     retstr += "Size: %s (%s) " % (self.size, self.size_rank)
     retstr += "XP: %s (%s) " % (self.xp, self.xp_rank)
     retstr += "Idle: %s " % (self.idle,)
     return encode(retstr)
     return retstr
Example #15
0
 def disconnect(self, line):
     # Cleanly close sockets
     print "%s Disconnecting IRC... (%s)" % (time.asctime(),encode(line),)
     try:
         self.write("QUIT :%s" % (line,))
     except Reboot:
         pass
     finally:
         self.close()
     return ()
Example #16
0
 def write(self, line):
     # Write to socket/server
     ponging = self.pong.match(line)
     if ponging:
         self.sock.send(line + CRLF)
     else:
         while self.last + 1 >= time.time():
             time.sleep(0.5)
         self.sock.send(encode(line) + CRLF)
         self.last = time.time()
         print "%s >>> %s" % (time.asctime(), line)
Example #17
0
 def disconnect(self, line):
     # Cleanly close sockets
     print "%s Disconnecting IRC... (%s)" % (time.strftime("%Y%m%d %H:%M:%S |"),encode(line),)
     try:
         self.write("QUIT :%s" % (line,))
         self.quitting = True
         self.thread.join()
     except Reboot:
         pass
     finally:
         self.close()
     return ()
Example #18
0
File: sms.py Project: JDD/DLR
    def execute(self, message, user, params):
        
        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name,)
        text = encode(public_text + '/%s' %(user.phone,))
        receiver=User.load(name=rec,exact=False)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec,))
            return
        if receiver.name.lower() == 'zeb':
            message.reply("FOR EMERGENCY ONLY!!!! Zeb only has a land line so only rings will work. Use !phone show Zeb to get his phone number.")
            return
        if receiver.name.lower() == 'cormik':
            message.reply("Cormik has no mobile, but usually responds to emails. Use !whois Cormik to get his email address.")
            return
        if receiver.name.lower() == 'richards':
            message.reply("SMS does not work, richards is Deaf(no really, he can't hear).")
            return

        if not receiver.pubphone and user not in receiver.phonefriends:
            message.reply("%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent." % (receiver.name,))
            return

        if receiver.smsmode == "Email":
            message.reply("Emailing not yet implemented")
            return

        phone = self.prepare_phone_number(receiver.phone)
        if not phone or len(phone) <= 7:
            message.reply("%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent." % (receiver.name,))
            return

        if len(text) >= 160:
            message.reply("Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent." % (len(text),))
            return

        mode = Config.get("Misc", "sms")
        mode = receiver.smsmode or mode if mode == "combined" else mode
        mode = mode.lower()
        error = ""
        
        if mode == "googlevoice" or mode == "combined":
            error = self.send_googlevoice(user, receiver, public_text, phone, text)
            sent = "Google Voice"
        if mode == "clickatell" or (mode == "combined" and error is not None):
            error = self.send_clickatell(user, receiver, public_text, phone, text)
            sent = "Clickatell"
        
        if error is None:
            message.reply("%s successfully processed message to: %s saying: %s" % (sent,receiver.name,decode(text)))
        else:
            message.reply(error or "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you.")
Example #19
0
 def parse(self, line):
     # Parse the irc line
     self.line = line
     self._nick = line.split("!")[0][1:]
     self._hostmask = line.split()[0][1:]
     self._command = line.split()[1]
     self._channel = ""
     
     # Channel
     try:
         chan = ":"+line.split(":")[1] # The ":" is added after the split etc, just to make the .find()s return the right result
         hash = max(chan.find("#"),0) or len(line)
         amp = max(chan.find("&"),0) or len(line)
         if not hash == amp: # There's no # or &, ie both lines returned len(line)
             self._channel = line[min(hash,amp):].split()[0]
         else: # This should almost certainly give the bot's nick
             self._channel = line.split()[2]
     except IndexError:
         self._chanerror = True
     
     # Encoding
     self._nick = encode(self._nick)
     self._hostmask = encode(self._hostmask)
     self._command = encode(self._command)
     self._channel = encode(self._channel)
     
     # Message
     try:
         if len(line.split(":")[1].split()) < 3:
             self._msg = line[line.index(":",1)+1:]
         else:
             self._msg = " ".join(line.split()[3:])
         if self._msg and self._msg[0] == ":":
             self._msg = self._msg[1:]
         if (not self._msg or self._msg.strip() == "") and self._command != "PRIVMSG":
             # CUT needed this, but merlin gets *very* upset on an empty PRIVMSG.
             self._msgerror = True
     except ValueError:
         self._msgerror = True
Example #20
0
 def disconnect(self, line):
     # Cleanly close sockets
     print "%s Disconnecting IRC... (%s)" % (
         time.asctime(),
         encode(line),
     )
     try:
         self.write("QUIT :%s" % (line, ))
     except Reboot:
         pass
     finally:
         self.close()
     return ()
Example #21
0
 def parse(self, line):
     # Parse the irc line
     r = parse_raw_irc(line)
     self.line = line
     self._nick = r['source']['name']
     self._hostmask = r['source']['full']
     self._command = r['msg']
     self._channel = r['params'][2] if r['msg'] == "353" else r['params'][0]
     if not self._channel:
         self._chanerror = True
     
     # Encoding
     self._nick = encode(self._nick)
     self._hostmask = encode(self._hostmask)
     self._command = encode(self._command)
     self._channel = encode(self._channel)
     
     # Message
     self._msg = r['params'][-1]
     if (not self._msg or self._msg.strip() == "") and self._command != "PRIVMSG":
         # CUT needed this, but merlin gets *very* upset on an empty PRIVMSG.
         self._msgerror = True
Example #22
0
    def execute(self, message, user, params):

        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name,)
        text = encode(public_text + '/%s' %(user.phone,))
        receiver=User.load(name=rec,exact=False,access="member") or User.load(name=rec)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec,))
            return
        if receiver.smsmode == "Retard":
            message.reply("I refuse to talk to that incompetent retard. Check %s's mydef comment and use !phone show to try sending it using your own phone." %(receiver.name,))
            return

        if not receiver.pubphone and user not in receiver.phonefriends:
            message.reply("%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent." % (receiver.name,))
            return

        if receiver.smsmode == "Email":
            mode = receiver.smsmode
            phone = receiver.email
        else:
            mode = Config.get("Misc", "sms")
            phone = self.prepare_phone_number(receiver.phone)
            if not phone or len(phone) <= 7:
               message.reply("%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent." % (receiver.name,))
               return

        if len(text) >= 160:
            message.reply("Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent." % (len(text),))
            return

        mode = receiver.smsmode or mode if mode == "combined" else mode
        mode = mode.lower()
        error = ""

        if mode == "email":
            error = self.send_email(user, receiver, public_text, phone, text)
            sent = "Email"
        if mode == "googlevoice" or mode == "combined":
            error = self.send_googlevoice(user, receiver, public_text, phone, text)
            sent = "Google Voice"
        if mode == "clickatell" or (mode == "combined" and error is not None):
            error = self.send_clickatell(user, receiver, public_text, phone, text)
            sent = "Clickatell"
        
        if error is None:
            message.reply("%s successfully processed message to: %s saying: %s" % (sent,receiver.name,decode(text)))
        else:
            message.reply(error or "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you.")
Example #23
0
 def disconnect(self, line):
     # Cleanly close sockets
     print "%s Disconnecting IRC... (%s)" % (
         time.strftime("%Y%m%d %H:%M:%S |"),
         encode(line),
     )
     try:
         self.write("QUIT :%s" % (line, ))
         self.quitting = True
         self.thread.join()
     except Reboot:
         pass
     finally:
         self.close()
     return ()
Example #24
0
File: sms.py Project: munin/merlin
    def execute(self, message, user, params):
        
        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name,)
        text = encode(public_text + '/%s' %(user.phone,))
        receiver=User.load(name=rec,exact=False)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec,))
            return
        if receiver.name.lower() == 'valle':
            message.reply("I refuse to talk to that Swedish clown. Use !phone show Valle and send it using your own phone.")
            return 

        if not receiver.pubphone and user not in receiver.phonefriends:
            message.reply("%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent." % (receiver.name,))
            return

        phone = self.prepare_phone_number(receiver.phone)
        if not phone or len(phone) <= 7:
            message.reply("%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent." % (receiver.name,))
            return

        if len(text) >= 160:
            message.reply("Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent." % (len(text),))
            return

        mode = Config.get("Misc", "sms")
        if mode == "combined":
            if receiver.googlevoice == True:
                mode = "googlevoice"
            if receiver.googlevoice == False:
                mode = "clickatell"
        error = ""
        
        if mode == "googlevoice" or mode == "combined":
            error = self.send_googlevoice(user, receiver, public_text, phone, text)
        if mode == "clickatell" or (mode == "combined" and error is not None):
            error = self.send_clickatell(user, receiver, public_text, phone, text)
        
        if error is None:
            message.reply("Successfully processed To: %s Message: %s" % (receiver.name,text))
        else:
            message.reply(error or "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you.")
Example #25
0
 def read(self):
     # Read from socket
     try:
         line = decode(self.file.readline())
     except socket.error as exc:
         raise Reboot(exc)
     if line:
         if line[-2:] == CRLF:
             line = line[:-2]
         if line[-1] in CRLF:
             line = line[:-1]
         pinging = self.ping.match(line)
         if pinging:
             self.write("PONG :%s" % pinging.group(1), 0)
             #print "%s <<< PING? PONG!" % (time.asctime(),)
         else:
             print "%s <<< %s" % (time.asctime(),encode(line),)
         return line
     else:
         raise Reboot
Example #26
0
File: maps.py Project: munin/merlin
    def __str__(self):
        p = self.planet
        ph = p.history(self.tick)

        head = "%s on %s:%s:%s " % (self.type, p.x, p.y, p.z)
        pa_id = self.pa_id
        pa_id = encode(self.pa_id)
        id_tick = "(id: %s, pt: %s)" % (pa_id, self.tick)
        vdiff = p.value - ph.value if ph else None
        id_age_value = "(id: %s, age: %s, value diff: %s)" % (pa_id, Updates.current_tick() - self.tick, vdiff)

        if self.scantype in ("P",):
            return head + id_tick + str(self.planetscan)
        if self.scantype in ("D",):
            return head + id_tick + str(self.devscan)
        if self.scantype in ("U", "A"):
            return head + id_age_value + " " + " | ".join(map(str, self.units))
        if self.scantype == "J":
            return head + id_tick + " " + " | ".join(map(str, self.fleets))
        if self.scantype == "N":
            return head + Config.get("URL", "viewscan") % (self.pa_id,)
Example #27
0
 def read(self):
     # Read from socket
     try:
         line = decode(self.file.readline())
     except socket.error as exc:
         raise Reboot(exc)
     if line:
         if line[-2:] == CRLF:
             line = line[:-2]
         if line[-1] in CRLF:
             line = line[:-1]
         pinging = self.ping.match(line)
         if pinging:
             self.write("PONG :%s" % pinging.group(1))
             #print "%s <<< PING? PONG!" % (time.asctime(),)
         else:
             print "%s <<< %s" % (
                 time.asctime(),
                 encode(line),
             )
         return line
     else:
         raise Reboot
Example #28
0
File: maps.py Project: munin/merlin
 def __str__(self):
     p = self.owner
     return encode(
         "(%s:%s:%s %s | %s %s %s)" % (p.x, p.y, p.z, self.fleet_name, self.fleet_size, self.mission, self.eta)
     )
     return "(%s:%s:%s %s | %s %s %s)" % (p.x, p.y, p.z, self.fleet_name, self.fleet_size, self.mission, self.eta)
Example #29
0
File: sms.py Project: berten/merlin
    def execute(self, message, user, params):

        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name, )
        text = encode(public_text + '/%s' % (user.phone, ))
        receiver = User.load(name=rec, exact=False,
                             access="member") or User.load(name=rec)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec, ))
            return
        if receiver.smsmode == "Retard":
            message.reply(
                "I refuse to talk to that incompetent retard. Check %s's mydef comment and use !phone show to try sending it using your own phone."
                % (receiver.name, ))
            return

        if not (receiver.pubphone or receiver.smsmode == "Email"
                ) and user not in receiver.phonefriends and user.access < (
                    Config.getint("Access", "SMSer")
                    if "SMSer" in Config.options("Access") else 1000):
            message.reply(
                "%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent."
                % (receiver.name, ))
            return

        if receiver.smsmode == "Email":
            mode = "email"
            phone = receiver.email
            if not phone:
                message.reply(
                    "That incompetent retard %s has set their sms mode to email but hasn't provided an address. Super secret message not sent."
                    % (receiver.name, ))
                return
        else:
            mode = Config.get("Misc", "sms")
            phone = self.prepare_phone_number(receiver.phone)
            if not phone or len(phone) <= 7:
                message.reply(
                    "%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent."
                    % (receiver.name, ))
                return

            if (receiver.smsmode == "WhatsApp"):
                if Config.get("WhatsApp", "login"):
                    mode = "whatsapp"
            elif (receiver.smsmode == "Twilio"):
                if Config.get("Twilio", "sid"):
                    mode = "twilio"
            else:
                mode = receiver.smsmode or mode if mode == "combined" else mode
                mode = mode.lower()
        error = ""

        if len(text) >= 160:
            message.reply(
                "Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent."
                % (len(text), ))
            return

        if mode == "email":
            error = self.send_email(user, receiver, public_text, phone, text)
        elif mode == "whatsapp":
            if receiver.phone[0] == "g":
                phone = receiver.phone
            wa = WhatsappEchoClient(phone[1:], text, True)
            wa.login(
                Config.get("WhatsApp", "login"),
                Config.get("WhatsApp", "password").decode("string_escape"))
            if wa.gotReceipt:
                error = None
                self.log_message(user, receiver, phone, public_text,
                                 "whatsapp")
            else:
                error = "No receipt received from the WhatsApp server."
        elif mode == "twilio":
            client = Client(Config.get("Twilio", "sid"),
                            Config.get("Twilio", "auth_token"))
            tw = client.messages.create(body=text,
                                        to=phone,
                                        from_=Config.get("Twilio", "number"))
            if tw.sid:
                error = None
                self.log_message(user, receiver, phone, public_text, "twilio")
            else:
                error = "Failed to get message ID from Twilio server."
        else:
            if mode == "googlevoice" or mode == "combined":
                if Config.get("googlevoice", "user"):
                    error = self.send_googlevoice(user, receiver, public_text,
                                                  phone, text)
                else:
                    error = "smsmode set to Google Voice but no Google Voice account is available."
            if mode == "clickatell" or (mode == "combined"
                                        and error is not None):
                if Config.get("clickatell", "user"):
                    error = self.send_clickatell(user, receiver, public_text,
                                                 phone, text)
                else:
                    if mode == "combined":
                        error = "smsmode set to combined but no SMS account is available."
                    else:
                        error = "smsmode set to Clickatell but no Clickatell account is available."

        if error is None:
            message.reply("Successfully processed To: %s Message: %s" %
                          (receiver.name, decode(text)))
        else:
            message.reply(
                error or
                "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you."
            )
Example #30
0
File: maps.py Project: munin/merlin
 def __str__(self):
     return encode(self.text)
     return self.text
Example #31
0
    def execute(self, message, user, params):
        
        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name,)
	print params.group(3);
        text = encode(public_text + '/%s' %(user.phone,))
        receiver=User.load(name=rec,exact=False,access="member") or User.load(name=rec)

	if (params.group(3) is not None):
		method = params.group(3).strip().split("=");
		if (method[1] == "w"):
			receiver.smsmode = "Whatsapp";
		if (method[1] == "t"):
			receiver.smsmode = "Twillio";
		if (method[1] == "c"):
			receiver.smsmode = "Clickatell"
        if not receiver:
            message.reply("Who exactly is %s?" % (rec,))
            return
        if receiver.smsmode == "Retard":
            message.reply("I refuse to talk to that incompetent retard. Check %s's mydef comment and use !phone show to try sending it using your own phone." %(receiver.name,))
            return 

        if not (receiver.pubphone or receiver.smsmode =="Email") and user not in receiver.phonefriends and user.access < (Config.getint("Access","SMSer") if "SMSer" in Config.options("Access") else 1000):
            message.reply("%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent." % (receiver.name,))
            return

        if receiver.smsmode == "Email":
            mode = "email"
            phone = receiver.email
            if not phone:
                message.reply("That incompetent retard %s has set their sms mode to email but hasn't provided an address. Super secret message not sent." % (receiver.name,))
                return
        else:
            mode = Config.get("Misc", "sms")
            phone = self.prepare_phone_number(receiver.phone)
            if not phone or len(phone) <= 7:
                message.reply("%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent." % (receiver.name,))
                return

            if (receiver.smsmode == "WhatsApp"):
                if Config.get("WhatsApp", "login"):
                    mode = "whatsapp"
            elif (receiver.smsmode == "Twilio"):
                if Config.get("Twilio", "sid"):
                    mode = "twilio"
            else:
                mode = receiver.smsmode or mode if mode == "combined" else mode
                mode = mode.lower()
        error = ""
        
        if len(text) >= 160:
            message.reply("Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent." % (len(text),))
            return

        if mode == "email":
            error = self.send_email(user, receiver, public_text, phone, text)
        elif mode == "whatsapp":
		message.reply("SMS via WhatsApp has been disabled as WA fricking blocked us - re-routing to clickatell...");
           	mode = "clickatell"
            	receiver.smsmode = "clickatell"
		error = self.send_clickatell(user, receiver, public_text, phone, text)		
	elif mode == "twilio":
            client = TwilioRestClient(Config.get("Twilio", "sid"), Config.get("Twilio", "auth_token"))
            tw = client.sms.messages.create(body=text, to=phone, from_=Config.get("Twilio", "number"))
            if tw.sid:
                error = None
                self.log_message(user, receiver, phone, public_text, "twilio")
            else:
                error = "Failed to get message ID from Twilio server."

        else:
            if mode == "googlevoice" or mode == "combined":
                if Config.get("googlevoice", "user"):
                    error = self.send_googlevoice(user, receiver, public_text, phone, text)
                else:
                    error = "smsmode set to Google Voice but no Google Voice account is available."
            if mode == "clickatell" or (mode == "combined" and error is not None):
                if Config.get("clickatell", "user"):
                    error = self.send_clickatell(user, receiver, public_text, phone, text)
                else:
                    if mode == "combined":
                        error = "smsmode set to combined but no SMS account is available."
                    else:
                        error = "smsmode set to Clickatell but no Clickatell account is available."
        
        if error is None:
            message.reply("Successfully processed To: %s Message: %s Method: %s" % (receiver.name, decode(text),receiver.smsmode))
        else:
            message.reply(error or "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you.")
Example #32
0
File: maps.py Project: munin/merlin
 def __str__(self):
     reply = "Attack %d LT: %d %s | %s | Planets: " % (self.id, self.landtick, self.comment, self.link)
     reply += ", ".join(map(lambda p: "%s:%s:%s" % (p.x, p.y, p.z), self.planets))
     return encode(reply)
     return reply
Example #33
0
    def execute(self, message, user, params):
        
        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name,)
        text = encode(public_text + '/%s' %(user.phone,))
        receiver=User.load(name=rec,exact=False,access="member") or User.load(name=rec)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec,))
            return
        if receiver.smsmode == "Retard":
            message.reply("I refuse to talk to that incompetent retard. Check %s's mydef comment and use !phone show to try sending it using your own phone." %(receiver.name,))
            return 

        if not (receiver.pubphone or receiver.smsmode =="Email") and user not in receiver.phonefriends and user.access < (Config.getint("Access","SMSer") if "SMSer" in Config.options("Access") else 1000):
            message.reply("%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent." % (receiver.name,))
            return

        if receiver.smsmode == "Email":
            mode = "email"
            phone = receiver.email
            if not phone:
                message.reply("That incompetent retard %s has set their sms mode to email but hasn't provided an address. Super secret message not sent." % (receiver.name,))
                return
        else:
            mode = Config.get("Misc", "sms")
            phone = self.prepare_phone_number(receiver.phone)
            if not phone or len(phone) <= 7:
                message.reply("%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent." % (receiver.name,))
                return

            if (receiver.smsmode == "WhatsApp"):
                if Config.get("WhatsApp", "login"):
                    mode = "whatsapp"
            else:
                mode = receiver.smsmode or mode if mode == "combined" else mode
                mode = mode.lower()
        error = ""
        
        if len(text) >= 160:
            message.reply("Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent." % (len(text),))
            return

        if mode == "email":
            error = self.send_email(user, receiver, public_text, phone, text)
        elif mode == "whatsapp":
            wa = WhatsappEchoClient(phone[1:], text, True)
            wa.login(Config.get("WhatsApp", "login"), Config.get("WhatsApp", "password").decode("string_escape"))
            if wa.gotReceipt:
                error = None
            else:
                error = "No receipt received from the WhatsApp server."
        else:
            if mode == "googlevoice" or mode == "combined":
                error = self.send_googlevoice(user, receiver, public_text, phone, text)
            if mode == "clickatell" or (mode == "combined" and error is not None):
                error = self.send_clickatell(user, receiver, public_text, phone, text)
        
        if error is None:
            message.reply("Successfully processed To: %s Message: %s" % (receiver.name, decode(text)))
        else:
            message.reply(error or "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you.")
Example #34
0
    def execute(self, message, user, params):

        rec = params.group(1)
        public_text = params.group(2) + ' - %s' % (user.name, )
        text = encode(public_text + '/%s' % (user.phone, ))
        receiver = User.load(name=rec, exact=False,
                             access="member") or User.load(name=rec)
        if not receiver:
            message.reply("Who exactly is %s?" % (rec, ))
            return
        if receiver.smsmode == "Retard":
            message.reply(
                "I refuse to talk to that incompetent retard. Check %s's mydef comment and use !phone show to try sending it using your own phone."
                % (receiver.name, ))
            return

        if not receiver.pubphone and user not in receiver.phonefriends:
            message.reply(
                "%s's phone number is private or they have not chosen to share their number with you. Supersecret message not sent."
                % (receiver.name, ))
            return

        if receiver.smsmode == "Email":
            mode = receiver.smsmode
            phone = receiver.email
            if not phone:
                message.reply(
                    "That incompetent retard %s has set their sms mode to email but hasn't provided an address. Super secret message not sent."
                    % (receiver.name, ))
                return
        else:
            mode = Config.get("Misc", "sms")
            phone = self.prepare_phone_number(receiver.phone)
            if not phone or len(phone) <= 7:
                message.reply(
                    "%s has no phone number or their phone number is too short to be valid (under 6 digits). Super secret message not sent."
                    % (receiver.name, ))
                return

        if len(text) >= 160:
            message.reply(
                "Max length for a text is 160 characters. Your text was %i characters long. Super secret message not sent."
                % (len(text), ))
            return

        mode = receiver.smsmode or mode if mode == "combined" else mode
        mode = mode.lower()
        error = ""

        if mode == "email":
            error = self.send_email(user, receiver, public_text, phone, text)
        if mode == "googlevoice" or mode == "combined":
            error = self.send_googlevoice(user, receiver, public_text, phone,
                                          text)
        if mode == "clickatell" or (mode == "combined" and error is not None):
            error = self.send_clickatell(user, receiver, public_text, phone,
                                         text)

        if error is None:
            message.reply("Successfully processed To: %s Message: %s" %
                          (receiver.name, decode(text)))
        else:
            message.reply(
                error or
                "That wasn't supposed to happen. I don't really know what went wrong. Maybe your mother dropped you."
            )