def help_command(self, message=None): logging.info('HELP') jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False info = message.arg.strip().replace("\r"," ") info = re.sub('\n',' ',info) if info != None and settings.COMMANDS_HELP.has_key(info): message.reply(settings.COMMANDS_HELP[info]) return True cmd = "" keys = settings.COMMANDS_DESC.keys(); keys.sort() for key in keys: cmd += "/"+key+" - "+settings.COMMANDS_DESC[key]+"\n" # link do webGUI gui_hash = '' user = Roster.findByJid(jid) if(user != None): if user.password == None or user.password == Null: # Generate password m = hashlib.md5() m.update("Nobody inspects") #logging.info(str(m.digest())) gui_hash = str(user.key()) logging.info('xxx') #message.reply("Devel ver. %s\nLista dostępnych poleceń:\n%s\n\nLink do webGUI: %s" % (Version.getMajorVersion(), cmd, settings.WEBGUI_URL+gui_hash)) return True
def _post(self): self.view['errors'] = {} if self._validate(): solution = Solution(title=self._post['title'],body=self._post['body'],author=Roster.findByJid(self.session['auth']['jid']),language=int(self._post['language'])) solution.put() super(Controller, self).redirect('/solutions/%s' % (solution.key().id())) self.view['post'] = self._post
def post(self): jid = self.request.get('from').split('/')[0] logging.info("Subskrypcja od: %s", jid) allowedUser = False for item in settings.ALLOWED_USERS: if(item == jid): allowedUser = True break if(allowedUser == True or jid.find('@'+settings.ALLOWED_DOMAIN) > 0): if(Roster.findByJid(jid) == None): roster = Roster(jid=jid) roster.put() xmpp.send_message(jid,settings.WELCOME_MESSAGE) else: logging.warn("Uzytkownik niedozwolony: %s", jid) xmpp.send_presence(jid,'',settings.BOT_JID,xmpp.PRESENCE_TYPE_UNAVAILABLE,xmpp.PRESENCE_SHOW_NONE)
def switch_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False info = message.arg.strip().replace("\r","") info = re.sub('\n','',info) Rooms(name='Rooms',author=jid).switch(jid,info) pass
def info_command(self, message=None): jid = message.sender.split('/')[0] info = message.arg.strip().strip("#") if Roster.check_jid(jid) == False: return False info = info.replace("\r"," ") info = re.sub('\n',' ',info) if(len(info) <= 1): message.reply('Wpisz dłuższą wiadomość (minimum to 2 znaki).') return False if info in ['off','on']: infoCmd = False; if info == 'on': infoCmd = True r = Roster.findByJid(jid) if r <> None: r.infoCmd = infoCmd r.put() if infoCmd: message.reply('Od tej chwili będziesz otrzymywał informacje od użytkowników systemu. Zawsze możesz to zmienić wpisująć /info off') else: message.reply('Informacje od użytkowników systemu nie będą już więcej wysyłane do Ciebie. Zawsze możesz to zmienić wpisująć /info on') return True # Sprawdz na jakim pokoju pisze user currentRoom = DbSettings.get(jid,"currentRoom") if currentRoom != None and currentRoom != "global" and message.arg.strip()[0] != '#': self.send_to_room(message,currentRoom) return True r = Roster.all() r.filter("jid !=",jid) r.filter("infoCmd =",True) items = r.fetch(settings.BROADCAST_USERS_LIMIT) if len(items) == 0: message.reply('Brak osób które mogłyby odpowiedzieć na Twoją wiadomość (wszyscy wyłączyli sobie chęć odbierania tego typu powiadomień?).') return False jids = [] for item in items: jids.append(item.jid) xmpp.send_message(jids,u'%s: %s' % (re.sub(r'([\w\.-]+)@([\w\.-]+)', r'\1',jid),info)) try: mes = InfoMessages(jid=jid,message=info) mes.put() except: message.reply('Hurray! BOT exceeded quota limit. Thx You :) ');
def send_to_room(self,message=None,roomName=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False info = message.arg.strip().replace("\r"," ") info = re.sub('\n',' ',info) if roomName != None: info = u"#"+roomName+u" "+info return Rooms(name='Rooms',author=jid).send(jid,info)
def invite_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False info = message.arg.strip().replace("\r","") info = re.sub('\n','',info) params = info.split(' '); try: Rooms(name='Rooms',author=jid).invite(jid,params[0],params[1]) except IndexError: message.reply(u'Poprawna składnia to /invite kto nazwaPokoju')
def _get(self): self.view['info'] = '' if self._is_logged: super(Controller, self).redirect('/') elif (self.request.get('hash')): try: user = Roster.get(self.request.get('hash')) if(user != None): self.__init_session(user) super(Controller, self).redirect('/') else: self.view['info'] = 'Błędny login lub hasło.' except datastore_errors.BadKeyError: self.view['info'] = 'Błędny login lub hasło.'
def _post(self): if(self.request.get('login') and self.request.get('pass')): user = Roster.findByJid(self.request.get('login')) #user.password = md5.new(self.request.get('pass')).hexdigest() #user.acl = Acl.ADMIN #user.put() if user != None and user.password == md5.new(self.request.get('pass')).hexdigest(): self.session['auth'] = { 'jid' : user.jid, 'password' : user.password, 'acl' : user.acl } log = LogsLogin(userRef=user) log.put() super(Controller, self).redirect('/') else: self.view['info'] = 'Błędny login lub hasło.'
def online_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False p = PresenceStatus.all() p = p.fetch(settings.BROADCAST_USERS_LIMIT) if len(p) == 0: message.reply("Brak danych o użytkownikach") else: reply = 'Online [$ile/$all]:\n' ile = 0 all = 0 for item in p: if item.online: item.name = item.name.replace("@"+settings.ALLOWED_DOMAIN,"").replace('.',' ').title() reply+=item.name+'\n' ile = ile + 1 all = all + 1 if ile == 0: reply+='brak\n' reply = reply.replace('$ile', str(ile)).replace('$all', str(all)) message.reply(reply)
def online_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False p = PresenceStatus.all() p = p.fetch(settings.BROADCAST_USERS_LIMIT) if len(p) == 0: message.reply("Brak danych o użytkownikach") else: reply = 'Online:\n' offline = [] for item in p: item.name = item.name.replace("@"+settings.ALLOWED_DOMAIN,"") if item.online: reply+=item.name+'\n' else: offline.append({'name':item.name,'dt': item.last.strftime("%Y-%m-%d %H:%I:%S") }) if len(p) == len(offline): reply+='brak\n' reply+='\nOffline:\n' if len(offline): for item in offline: reply+=item['name']+' ('+item['dt']+')\n' message.reply(reply)
def post(self): jid = self.request.get('from').split('/')[0] if Roster.check_jid(jid) == False: return False presence = PresenceStatus(name=jid,online=False) presence.put()
def leave_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False Rooms(name='Rooms',author=jid).leave(jid,message.arg.strip())
def post(self): jid = self.request.get('from').split('/')[0] logging.info("UnSubskrypcja od: %s", jid) Roster.deleteByJid(jid)
def post(self): jid = self.request.get('from').split('/')[0] if Roster.check_jid(jid) == False: return False else: xmpp.send_presence(jid, status='Online')
def sync_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False pliki = message.arg.strip().replace("\r"," ") pliki = re.sub('\n',' ',pliki) logging.info('SYNC: %s from %s' % (pliki,jid)) cmd = pliki.split(' ') if(len(pliki) == 0): message.reply('Podaj listę plików, które chesz synchronizować - wpisz np.: /sync mojPlik.php robertaPlik.php') #elif(len(pliki) < 5): elif (len(cmd) > 0 and cmd[0] in ['off','on','ok','yes','tak','nie','no']): # /sync off if pliki == 'off': r = Roster.findByJid(jid) if r <> None: r.syncCmd = False r.put() message.reply('Informacje o plikach do synchronizacji nie będą już więcej wysyłane do Ciebie. Zawsze możesz to zmienić wpisująć /sync on') logging.info('SYNC OFF: %s' % (jid)) return True # /sync on if pliki == 'on': r = Roster.findByJid(jid) if r <> None: r.syncCmd = True r.put() message.reply('Od tej chwili będziesz otrzymywał informacje o plikach do synchronizacji. Zawsze możesz to zmienić wpisująć /sync off') logging.info('SYNC ON: %s' % (jid)) return True # /sync ok | yes | tak # /sync ok 1234 if len(cmd) > 0 and cmd[0] in ['ok','yes','tak','nie','no']: syncOdp = False if cmd[0] in ['ok','yes','tak']: syncOdp = True #Sprawdz czy ktos pyta o synchro sync = Sync.all() sync.filter('done =',False) sync.order("-__key__") item = sync.fetch(10) # Brak sync if len(item) == 0: message.reply('W tej chwili nikt nie synchronizuje plików. Jeżeli sam chcesz coś synchronizować wpisz np.: /sync plik1.php') return False # Więcej niż 1 elif len(item) > 1: multiSync = [] for i in item: if i.jid == jid: continue if self._checkSyncTime(i): multiSync.append(i) if len(multiSync) > 0: if len(cmd) > 1 and cmd[1] != None: try: idSync = int(cmd[1]) # Sprawdz czy id sync istnieje, jak tak to oznacz logging.info('Sprawdzam czy istnieje sync %s' % (idSync)) for i in multiSync: if i.key().id() == idSync: logging.info('Sync istnieje') syncAns = SyncAnswers.all() syncAns.filter("jid =",jid) syncAns.filter("syncId =",i.key().id()) syncAns = syncAns.fetch(1) if len(syncAns) > 0: sync = syncAns[0] sync.syncCmd = syncOdp sync.put() message.reply('Twoja odpowiedź została zaktualizowana.') return True SyncAnswer = SyncAnswers(syncId=i.key().id(),jid=jid,syncCmd=syncOdp) SyncAnswer.put() message.reply('Dziękuje za odpowiedź.') return True message.reply('Aktualnie nie ma synchro o identyfikatorze `%s`. Popraw i spróbuj ponownie :)' % (idSync)) return False except ValueError: logging.info('Blad parsowania') message.reply(u'Identyfikator `%s` nie jest poprawną liczbą. Popraw i spróbuj ponownie :)' % (cmd[1])) return False wiadomosc = u'W tym samym czasie przeprowadzanych jest %s pytań o synchro:\n' % (len(multiSync)) for i in multiSync: wiadomosc+=u'%s) %s: *%s*\n' % (i.key().id(),i.jid,i.files) wiadomosc+=u'Odpisz np `/sync ok %s` by zgodzić się na pierwsze synchro' % (multiSync[0].key().id()) message.reply(wiadomosc) else: message.reply('W tej chwili nikt nie synchronizuje plików.') return False # Jedno synchro t = datetime.datetime(*time.strptime(str(item[0].created).split('.')[0],"%Y-%m-%d %H:%M:%S")[0:5]) difference = datetime.datetime.now() - t minutes, seconds = divmod(difference.seconds, 60) logging.info('SYNC ok diff: %s' % (minutes)) if minutes > settings.SYNC_LIMIT_MIN: message.reply('W tej chwili nikt nie synchronizuje plików. Ostatnia prośba o synchro miało miejsce %s minut temu.' % (minutes)) return False #Sprawdz czy synchro nie robie ja sam if item[0].jid == jid: message.reply('Trwa zbieranie odpowiedzi od innych osób. Poczekaj cierpliwie na odpowiedź w sprawie Twojego synchro.') return False #Sprawdz czy juz odpowiadales sync = SyncAnswers.all() sync.filter("jid =",jid) sync.filter("syncId =",item[0].key().id()) sync = sync.fetch(1) if len(sync) > 0: sync = sync[0] sync.syncCmd = syncOdp sync.put() message.reply('Twoja odpowiedź została zaktualizowana.') return True #Odpowiedz SyncAnswer = SyncAnswers(syncId=item[0].key().id(),jid=jid,syncCmd=syncOdp) SyncAnswer.put() message.reply('Dziękuje za odpowiedź.') return True else: if(len(pliki) < 5): message.reply('Co tak skromnie? Podaj więcej plików, które chesz synchronizować - wpisz np.: /sync mojPlik.php robertaPlik.php') return False sync = Sync.all() sync.filter("jid =", jid) sync.order("-__key__") item = sync.fetch(1) if len(item) > 0: t = datetime.datetime(*time.strptime(str(item[0].created).split('.')[0],"%Y-%m-%d %H:%M:%S")[0:5]) difference = datetime.datetime.now() - t minutes, seconds = divmod(difference.seconds, 60) logging.info('SYNC diff: %s' % (minutes)) if settings.SYNC_LIMIT_MIN > minutes: message.reply('W ciągu ostatnich %s minut synchronizowałeś już pliki. Odczekaj troszkę i daj odpocząć serwerom :)' % (settings.SYNC_LIMIT_MIN)) return False r = Roster.all() r.filter("jid !=",jid) r.filter("syncCmd =",True) items = r.fetch(settings.BROADCAST_USERS_LIMIT) if(len(items) == 0): message.reply('Brak osób które mogłyby odpowiedzieć na Twoją synchronizację (wszyscy wyłączyli sobie chęć odbierania tego typu powiadomień?).') return False sync = Sync(jid=jid,files=pliki) sync.put() usersOnline = 0 p = PresenceStatus.all(keys_only=True) p.filter("online =",True) usersOnline = p.count() - 1 if p.count() > 0 else 0 # Informacja o synchro została wysłana do 5 osób (w tym 2 Idle) <-- tu powinno byc sprawdzone kto jest online message.reply('Informacja o synchro została wysłana do %s osób (w tym %s online). Jeżeli w przeciągu %s minut ktoś odpowie na Twoją prośbę zostaniesz o tym automatycznie poinformowany.' % (len(items),usersOnline,settings.SYNC_LIMIT_MIN)) jids = [] for item in items: jids.append(item.jid) msg = u'SYNC: %s\nPowyższe pliki zostaną synchronizowane przez %s. Czy wyrażasz na to zgodę? Odpowiedz: /sync tak|ok|yes jeżeli nie masz nic przeciwko lub /sync nie|no jeżeli synchronizacja ma zostać przerwana.' xmpp.send_message(jids,msg % (pliki,jid),None,xmpp.MESSAGE_TYPE_CHAT)
def unhandled_command(self, message=None): jid = message.sender.split('/')[0] if Roster.check_jid(jid) == False: return False message.reply("Nieznana komenda. Wpisz \help by wyświetlić pomoc.")