def update(group_id, id): if request.method == 'GET': message = MessageModel.find_by_id(_id=id, group_id=group_id) if message is None: flash( 'The scheduled message is already executed or does not exists.' ) return redirect(url_for('dashboard.index')) group = GroupModel.find_by_id(group_id).json() return render_template('dashboard/update.html', message=message, group_name=group['channel']['group_name']) if request.method == "POST": group_id = int(group_id) schedule = parse(request.form['schedule'] + '+05:30') error = None if schedule < datetime.datetime.now(pytz.timezone('Asia/Kolkata')): error = 'You can not schedule a message in past' if error: flash(error) job = scheduler.get_job(id) message = MessageModel.find_by_id(_id=id, group_id=group_id) if job and message: schedule_msg(request.form['message'], schedule, group_id, job) message.name = request.form['name'] message.message = request.form['message'] message.schedule = request.form['schedule'] + '+05:30' message.save_to_db() return redirect(url_for('dashboard.index')) return render_template('dashboard/schedules.html')
def delete(self, id): group = GroupModel.find_by_id(id) if group: group.delete_from_db() return {'message': 'Group deleted!'}, 200 return {'message': 'Group with that id not found.'}, 404
def get(self, id): group = GroupModel.find_by_id(id) if group: return group.json(), 200 return {'message': 'Item with that id not found.'}, 404
def post(self): data = request.get_json() if self._is_added(data): """ Add new group to DB """ telegram_group = TelegramModel.find_by_group_chat_id( data[MESSAGE][CHAT][ID]) group = GroupModel.find_by_id(telegram_group.group_fk) if group: logger.info('Group already exists in the database') return None group = GroupModel(data[MESSAGE][CHAT][TITLE], data[MESSAGE][CHAT][ID]) telegram = TelegramModel(data[MESSAGE][CHAT][ID], data[MESSAGE][CHAT][TITLE], group.id) try: group.save_to_db() telegram.save_to_db() logger.info('Group added to database') except: logger.error('unable to add group to database') if self._is_removed(data): # remove group from db telegram_group = TelegramModel.find_by_group_chat_id( data[MESSAGE][CHAT][ID]) group = GroupModel.find_by_id(telegram_group.group_fk) if group: group.delete_from_db() telegram_group.delete_from_db() logger.info('Group successfully deleted from database') else: logger.warning( 'Delete executed on a group which does not exist in the database.' ) if self._is_title_changed(data): telegram_group = TelegramModel.find_by_group_chat_id( data[MESSAGE][CHAT][ID]) telegram_group.group_name = data[MESSAGE][CHAT][NEW_CHAT_TITLE] try: group.save_to_db() logger.info('Group title updated.') except: logger.error('Failed to update Group title to {}'.format( data[MESSAGE][CHAT][NEW_CHAT_TITLE]))
def put(self, id): data = Group.parser.parse_args() group = GroupModel.find_by_id(id) group.name = data['name'] if data['description'] is not None: group.description = data['description'] group.save_to_db() return group.json(), 200
def post(self, group_id, user_id): group = GroupModel.find_by_id(group_id) user = UserModel.find_by_id(user_id) if group: if user: group.add_member(user) return { 'message': "User '{}' added to '{}'".format(user.username, group.name) }, 201 else: return {'message': 'User with that ID not found.'}, 404 return {'message': 'Group with that ID not found.'}, 404
def delete(self, group_id, user_id): group = GroupModel.find_by_id(group_id) user = UserModel.find_by_id(user_id) if group: if user: group.remove_member(user) return { 'message': "User '{}' removed from '{}'".format( user.username, group.name) }, 200 else: return {'message': 'User with that ID not found.'}, 404 return {'message': 'Group with that ID not found.'}, 404
def put(cls, id: int): group_json = request.get_json() group = GroupModel.find_by_id(id) process = "" if group: group.name = group_json["name"] group.updated_at = str(datetime.utcnow()) process = "updating" else: group_json["created_at"] = str(datetime.utcnow()) group_json["updated_at"] = str(datetime.utcnow()) group = group_schema.load(group_json) process = "inserting" try: group.save_to_db() except: return {"message": ERROR_INSERTING.format(process)}, 500 return group_schema.dump(group), 200
def schedule_msg(text, schedule, group_id, job=None): from resourcess.update import Update group = GroupModel.find_by_id(group_id).json() func = None args = None if group['channel']['channel_name'] == 'telegram': func = Update.telegram_send_message args = [text, int(group['channel']['group_chat_id'])] if group['channel']['channel_name'] == 'whatsapp': func = Update.whatsapp_send_message args = [group['channel']['group_name'], text] if job: job.modify(func=func, args=args) if schedule != job.next_run_time: job.reschedule(trigger='date', run_date=schedule) return job else: _id = Job(scheduler).id job = scheduler.add_job(id=_id, func=func, run_date=schedule, trigger='date', args=args) return job
def check_update(self): WebDriverWait(self.browser, 50).until(EC.presence_of_element_located( (By.XPATH, "//DIV[@id='pane-side']//DIV[@class='_3j7s9']"))) chats = self.browser.find_elements_by_xpath( "//DIV[@id='pane-side']//DIV[@class='_3j7s9']") for chat in chats: try: chat.click() except WebDriverException as e: continue WebDriverWait(self.browser, 50).until(EC.presence_of_element_located( (By.CLASS_NAME, '_3AwwN'))) # collect name of the group group_name = self.browser.find_element_by_xpath( "//HEADER[@class='_3AwwN']//SPAN[@dir='auto']").text whatsapp_group = WhatsAppModel.find_by_name(group_name) # check the membership is_removed = None try: is_removed = self.browser.find_element_by_xpath( "//DIV[@class='_2XiC1']") except NoSuchElementException: logger.info('') if is_removed: if whatsapp_group: group = GroupModel.find_by_id(whatsapp_group.group_fk) whatsapp_group.delete_from_db() group.delete_from_db() try: self.browser.find_element_by_xpath( "(//SPAN[@data-icon='menu'])[2]" ).click() self.browser.find_element_by_xpath( "//DIV[@class='_3lSL5 _2dGjP'][text()='Delete group']" ).click() self.browser.find_element_by_xpath( "//DIV[@class='_1WZqU PNlAR'][text()='Delete']" ).click() self.browser.find_element_by_xpath( "//DIV[@class='_3I_df']" ).click() self.browser.find_element_by_xpath( "//DIV[@class='_1WZqU PNlAR'][text()='Clear']" ).click() except: logger.info('') continue if whatsapp_group: continue try: self.browser.find_element_by_class_name('_3AwwN').click() except: logger.info('') WebDriverWait(self.browser, 50).until(EC.presence_of_element_located( (By.CLASS_NAME, '_1xGbt'))) chat_type = self.browser.find_element_by_class_name('_1xGbt').text if chat_type == 'Group info': # check if the bot is member of the group or not. if new membership # is found add the the membership to the database. if removal of # membership is noticed then reflect the same on the database. logger.info('new group found') group_model = GroupModel('whatsapp',group_identifier=group_name) group_model.save_to_db() group_fk = group_model.id whatsapp_group = WhatsAppModel(group_name,group_fk) whatsapp_group.save_to_db()
def delete(cls, id: int): group = GroupModel.find_by_id(id) if group: group.delete_from_db() return {"message": GROUP_DELETED}, 200 return {"message": GROUP_NOT_FOUND}, 404
def get(cls, id: int): group = GroupModel.find_by_id(id) if group: return group_schema.dump(group), 200 return {"message": GROUP_NOT_FOUND}, 404