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')
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
    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]))
Beispiel #5
0
    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
Beispiel #6
0
    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
Beispiel #7
0
    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
Beispiel #8
0
    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
Beispiel #10
0
 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()
Beispiel #11
0
 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
Beispiel #12
0
 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