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 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 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()