def user_enter(self): # get field username and password username = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[0], self.arr_id[list(self.arr_id)[0]][0])).edit.text() password = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[0], self.arr_id[list(self.arr_id)[0]][1])).edit.text() # get url for enter url = "api/auth/token/login/" url2 = "api/user/" # check fields if '@' in username: user = requests.get(self.url + url2 + '?email=' + username) user_dict = json.loads(user.content.decode('utf-8')) if not user_dict: self.login.error_block.show() self.login.error_block.setText(get_lang('login_error001')) else: user = requests.get(self.url + url2 + '?username='******'utf-8')) if not user_dict: self.login.error_block.show() self.login.error_block.setText(get_lang('login_error001')) # login user if user_dict: data = { 'username': user_dict[0]['username'], 'password': password, } res = requests.post(self.url + url, data=data) # get token token = json.loads(res.content.decode('utf-8')) # check token try: token['non_field_errors'] self.login.error_block.show() self.login.error_block.setText(get_lang('login_error002')) except KeyError: # save cookie copy = open(BASE_DIR + r'\cookies\token.json', 'w') token['username'] = username token['password'] = password copy.write(json.dumps(token)) copy.close()
def morias_template(req, template, **kwargs): if 'lang' not in kwargs: # lang could be set explicit kwargs['lang'] = get_lang(req) languages = get_langs(req) else: languages = (kwargs['lang'],) # then use languages kwargs['debug'] = req.cfg.debug if hasattr(req, 'login'): kwargs['login'] = req.login kwargs['site'] = Object() kwargs['site'].name = req.cfg.site_name kwargs['site'].description = req.cfg.site_description kwargs['site'].keywords = req.cfg.site_keywords kwargs['site'].author = req.cfg.site_author kwargs['site'].copyright = req.cfg.site_copyright kwargs['site'].styles = req.cfg.site_styles + kwargs.pop('styles', ()) kwargs['site'].this = req.uri kwargs['site'].scheme = req.scheme kwargs['site'].domain = req.hostname kwargs['site'].modules = req.cfg.modules kwargs['site'].footers = req.cfg.footers kwargs['e'] = sdict() translations = translation('morias', localedir=req.cfg.locales, languages=languages, fallback=True) return jinja_template(template, req.cfg.templates, translations, **kwargs)
def generic_message(bot, update, text_code, **kwargs): """Answers the message with a fixed text. Add kwargs to insert text.""" message = update.effective_message lang = get_lang(update.effective_user.language_code) message.reply_text(lang.get_text(text_code, **kwargs), parse_mode=ParseMode.MARKDOWN)
def empty_query(bot, update): user = user_manager.get_user(update.effective_user) user_lists = list_manager.get_lists_from_user(user.id) lang = get_lang(user.language_code) results = [] if user_lists: for list in user_lists: message, keyboard = _create_list_message(list, lang), _create_list_keyboard(list, lang) new_result = InlineQueryResultArticle(id=list.id, title=list.title, description=lang.get_text("send_existent"), reply_markup=InlineKeyboardMarkup(keyboard), input_message_content=InputTextMessageContent( message_text=message, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True)) results.append(new_result) else: message = lang.get_text("no_existent_meeting_message", bot_username=const.aux.BOT_USERNAME) results = [InlineQueryResultArticle(id="no_meeting", title=lang.get_text("no_existent_meeting_query_title"), description=lang.get_text("no_existent_meeting_query_description"), input_message_content=InputTextMessageContent( message_text=message, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True))] update.inline_query.answer(results, is_personal=True, cache_time=const.QUERY_CACHE_TIME, switch_pm_text=lang.get_text("donations_accepted"), switch_pm_parameter="donation")
def donate(bot, update, user_data): if PAYMENT_PROVIDER_TOKEN is None: generic_message(bot, update, "donations_not_available") return lang = get_lang(update.effective_user.language_code) user_data["donation"] = 5 text = lang.get_text("donate") keyboard = [[ InlineKeyboardButton("❤ %s€ ❤" % user_data["donation"], callback_data="donate") ], [ InlineKeyboardButton("⏬", callback_data="don*LLL"), InlineKeyboardButton("⬇️", callback_data="don*LL"), InlineKeyboardButton("🔽", callback_data="don*L"), InlineKeyboardButton("🔼", callback_data="don*G"), InlineKeyboardButton("⬆️", callback_data="don*GG"), InlineKeyboardButton("⏫", callback_data="don*GGG") ]] update.message.reply_text(text, reply_markup=InlineKeyboardMarkup(keyboard), parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True)
def generic_message(bot, update, text_code): # Responde a cualquier mensaje con un texto genérico, sin añadiduras. message = update.effective_message user = update.effective_user user_lang_code = user.language_code lang = get_lang(user_lang_code) message.reply_text(lang.get_text(text_code), parse_mode=ParseMode.MARKDOWN)
def _api_predict_text(text): data = urllib.urlencode({ 'key': PREDICT_API_KEY, 'lang': get_lang(text), 'q': text }) request = urllib2.urlopen(PREDICT_API_URL, data) return json.loads(request.read())
def support(bot, update): message = update.effective_message lang = get_lang(update.effective_user.language_code) if len(message.text.replace("/support", "")) > 0: message.forward(const.ADMIN_TELEGRAM_ID) message.reply_text(lang.get_text("support_sent")) else: message.reply_text(lang.get_text("support_default"))
def ts3_notifications_panel(bot, update): """A panel on the private chat to activate/deactivate the ts3 notifications.""" lang = get_lang(update.effective_user.language_code) keyboard = [[InlineKeyboardButton("🔔", callback_data="notify_activate"), InlineKeyboardButton("🔕", callback_data="notify_deactivate")]] update.effective_message.reply_text(lang.get_text("notifications_panel"), reply_markup=InlineKeyboardMarkup(keyboard))
def full_query(bot, update): query_split = update.inline_query.query.split("*") user = user_manager.get_user(update.effective_user) lang = get_lang(user.language_code) # If the query starts with id* this is a list search by id. if query_split[0] == "id": list_id = query_split[1] list = list_manager.get_list_by_id(list_id) if list: message, keyboard = _create_list_message(list, lang), _create_list_keyboard(list, lang) results = [InlineQueryResultArticle(id=list.id, title=list.title, description=lang.get_text("send_existent_meeting_query_description"), reply_markup=InlineKeyboardMarkup(keyboard), input_message_content=InputTextMessageContent( message_text=message, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True) )] else: message = lang.get_text("list_not_found_message") results = [InlineQueryResultArticle(id="not_found", title=lang.get_text("list_not_found_query_title"), description=lang.get_text("list_not_found_query_description"), input_message_content=InputTextMessageContent( message_text=message, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True ))] else: list_id = uuid4() keyboard = _create_list_keyboard(List, lang, list_id) results = [InlineQueryResultArticle(id=list_id, title=update.inline_query.query, description=lang.get_text("press_to_send"), reply_markup=InlineKeyboardMarkup(keyboard), input_message_content=InputTextMessageContent( message_text="*%s*" % update.inline_query.query, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True ))] update.inline_query.answer(results, is_personal=True, cache_time=const.QUERY_CACHE_TIME, switch_pm_text=lang.get_text("donations_accepted"), switch_pm_parameter="donation")
def ts3_command_group(bot, update): global last_ts3_command_usage lang = get_lang(update.effective_user.language_code) # Check if the command was used early in the group. if last_ts3_command_usage + const.GROUP_COMMAND_USAGE_DELAY < time() or \ update.effective_user.id == const.ADMIN_TELEGRAM_ID: ts3_command(bot, update) else: keyboard = [[InlineKeyboardButton(lang.get_text("use_in_pm"), url="t.me/%s?start=ts3" % const.aux.BOT_USERNAME)]] update.effective_message.reply_text(lang.get_text("use_the_command_in_private_chat"), reply_markup=InlineKeyboardMarkup(keyboard)) last_ts3_command_usage = time()
def start(bot, update, args): if not args: generic_message(bot, update, "start", bot_username=const.aux.BOT_USERNAME) else: # Send the complete list of votes for a particular option. list_id, vote_option = args[0].split("_") list = list_manager.get_list_by_id(list_id) user = user_manager.get_user(update.effective_user) lang = get_lang(user.language_code) text = _create_complete_list_message(list, vote_option, lang) keyboard = _create_complete_list_keyboard(list, lang) update.effective_message.reply_text(text, reply_markup=InlineKeyboardMarkup(keyboard), parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True)
def get_clist(bot, update): user = user_manager.get_user(update.effective_user) lang = get_lang(user.language_code) vote_option, list_id = update.callback_query.data.split("*")[1:3] list = list_manager.get_list_by_id(list_id) text = _create_complete_list_message(list, vote_option, lang) keyboard = _create_complete_list_keyboard(list, lang) try: update.effective_message.edit_text(text, reply_markup=InlineKeyboardMarkup(keyboard), parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True) except Exception as e: pass update.callback_query.answer()
def send_donation_receipt(bot, update, user_data): lang = get_lang(update.effective_user.language_code) if "donation" not in user_data: user_data["donation"] = 5 title = lang.get_text("donation_title") description = lang.get_text("donation_description") prices = [LabeledPrice(title, user_data["donation"] * 100)] bot.send_invoice(chat_id=update.effective_chat.id, title=title, description=description, payload="approve_donation", provider_token=PAYMENT_PROVIDER_TOKEN, start_parameter="donacion", currency="EUR", prices=prices) update.effective_message.edit_reply_markup(reply_markup=InlineKeyboardMarkup([[]]))
def cast_vote(bot, update): user = user_manager.get_user(update.effective_user) lang = get_lang(user.language_code) vote, list_id = update.callback_query.data.split("*")[1:3] list = list_manager.get_list_by_id(list_id) if list: conn = database.get_connection() # Check if the user has voted before this list cur = conn.execute("SELECT vote FROM user_votes WHERE user_id=? AND list_id=?", [user.id, list.id]) past_vote = cur.fetchone() if past_vote: # If it is a new vote type, we change the vote type. if past_vote[0] != vote: conn.execute("UPDATE user_votes SET vote=?, vote_timestamp=? WHERE user_id=? AND list_id=?", [vote, time(), user.id, list.id]) # If it is the same, we remove the vote else: conn.execute("DELETE FROM user_votes WHERE user_id=? AND list_id=?", [user.id, list.id]) else: conn.execute("INSERT INTO user_votes VALUES (?, ?, ?, ?)", [user.id, list.id, vote, time()]) conn.commit() conn.close() message, keyboard = _create_list_message(list, lang), _create_list_keyboard(list, lang) bot.edit_message_text(text=message, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=InlineKeyboardMarkup(keyboard), inline_message_id=update.callback_query.inline_message_id) update.callback_query.answer("okay 👍") else: update.callback_query.answer(lang.get_text("warning_list_does_not_exist"), shot_alert=True) bot.edit_message_reply_markup(inline_message_id=update.callback_query.inline_message_id, reply_markup=InlineKeyboardMarkup([[]]))
def __init__(self): super().__init__() self.resize(500, 500) pixmap = QtGui.QPixmap(BASE_DIR + r'\media\cur\1.png').scaled(20, 20) cursor = QtGui.QCursor(pixmap) self.setCursor(cursor) # set cursor pixmap = QtGui.QPixmap(BASE_DIR + r'\media\cur\2.png').scaled(20, 20) cursor2 = QtGui.QCursor(pixmap) # check connect to server v = False x = 0 while v == False: try: test = requests.get(list_ip[x], timeout=5) self.url = list_ip[x] v = True except: if list_ip[x] == list_ip[-1]: self.url = False v = True x += 1 # set array of widget names self.arr_id = { 'log_sign_in': ['log_nickname', 'log_password'], # exit, Registration, entry 'log_registration': [ 'log_nickname', 'log_password', 'log_password_c', 'log_email', 'log_phone' ], # back->Sign_in, next->Check_code 'log_check_code': ['log_code-1', 'log_code-2'], # back->Registration, entry } # set main layout lay = QtWidgets.QVBoxLayout(self) lay.setSpacing(0) lay.setContentsMargins(0, 0, 0, 0) # set main widget main = QtWidgets.QWidget(self) main.setStyleSheet("background:{};".format( get_style('log_main_color'))) lay.addWidget(main) # set layout for center other widgets main_lay = QtWidgets.QGridLayout(main) main_lay.setSpacing(0) main_lay.setContentsMargins(0, 0, 0, 0) # set animation background back = BackGeometryAnimation(num_x=10, num_y=10, color=get_style('log_back_color'), min_size=20, max_size=60, min_rotate=0, max_rotate=90, duration=8000, parent=self) main_lay.addWidget(back, 0, 0, 1, 1, alignment=QtCore.Qt.AlignCenter) # set text widget for x in self.arr_id: center = QtWidgets.QWidget(self) # set id setattr(self, 'center_{}'.format(x), center) center.setStyleSheet("background:{};".format( get_style('log_center_color'))) center.setFixedWidth(get_style('log_center_width')) # set layout for content center.center_lay = QtWidgets.QVBoxLayout(center) center.title = QtWidgets.QLabel(center) # set style for title center.title.setStyleSheet( "background:{};padding:{}px;color:{};font-size:{}px;".format( get_style('log_title_color'), get_style('log_title_padding'), get_style('log_title_text_color'), get_style('log_title_size'))) if get_style('log_title_center'): center.title.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) # set text center.title.setText(get_lang(x)) center.center_lay.addWidget(center.title) # set triangle style # for left style_left = 'background:qconicalgradient(cx:{} , cy:0.5, angle:{}, stop:0.1450 {}, stop:0.1451 {})'.format( 0, 334, get_style('log_edblock_triangle_color'), get_style('log_edblock_triangle_back'), ) # for right style_right = 'background:qconicalgradient(cx:{} , cy:0.5, angle:{}, stop:0.1450 {}, stop:0.1451 {})'.format( 1, 153, get_style('log_edblock_triangle_color'), get_style('log_edblock_triangle_back'), ) for y in range(len(self.arr_id[x])): center.text_block = TextBlock( parent=center, back_color=get_style('log_edblock_back_color'), title_color=get_style('log_edblock_title_color'), title_text_color=get_style('log_edblock_title_text_color'), title_size=get_style('log_edblock_title_size'), title_padding=get_style('log_edblock_title_padding'), title_center=get_style('log_edblock_title_center'), title_text=get_lang(self.arr_id[x][y]), edit_color=get_style('log_edblock_edit_color'), edit_text_color=get_style('log_edblock_edit_text_color'), edit_size=get_style('log_edblock_edit_size'), edit_padding=get_style('log_edblock_edit_padding'), edit_text='', type='Password' if 'password' in self.arr_id[x][y] else 'Phone' if 'phone' in self.arr_id[x][y] else 'Text') # set id setattr(self, 'text_block_{}_{}'.format(x, self.arr_id[x][y]), center.text_block) center.center_lay.addWidget(center.text_block) # block for error center.error_block = QtWidgets.QLabel(center) center.error_block.setStyleSheet( 'background:{};color:{};font-size:{};padding:{}px'.format( get_style('log_error_back_color'), get_style('log_error_text_color'), get_style('log_error_size'), get_style('log_error_padding'), )) center.error_block.hide() center.center_lay.addWidget(center.error_block) # block for buttons center.widget_button = QtWidgets.QWidget(center) center.widget_button_lay = QtWidgets.QHBoxLayout( center.widget_button) center.center_lay.addWidget(center.widget_button) # add center widget main_lay.addWidget(center, 0, 0, 1, 1, alignment=QtCore.Qt.AlignCenter) # set right button center.right_button = QtWidgets.QPushButton(center) center.right_button.setStyleSheet( 'border:none;{}'.format(style_right)) center.right_button.setFixedHeight(get_style('log_button_size')) center.right_button.setFixedWidth(get_style('log_button_size')) # set left button center.left_button = QtWidgets.QPushButton(center) center.left_button.setStyleSheet( 'border:none;{}'.format(style_left)) center.left_button.setFixedHeight(get_style('log_button_size')) center.left_button.setFixedWidth(get_style('log_button_size')) # set cursor center.right_button.setCursor(cursor2) center.left_button.setCursor(cursor2) # set buttons on the sides center.vs = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) # set layout center.widget_button_lay.addWidget(center.left_button) center.widget_button_lay.addItem(center.vs) center.widget_button_lay.addWidget(center.right_button) # hide each block center.hide() # get each block individually # get login block self.login = getattr(self, 'center_{}'.format(list(self.arr_id)[0])) try: way = open(BASE_DIR + r'\cookies\token.json', 'r') save_log = json.load(way) log = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[0], self.arr_id[list(self.arr_id)[0]][0])) pas = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[0], self.arr_id[list(self.arr_id)[0]][1])) log.edit.setText(save_log['username']) pas.edit.setText(save_log['password']) except FileNotFoundError: pass if not self.url: self.login.error_block.show() self.login.error_block.setText(get_lang('ServerError000')) self.login.show() # set buttons for login block self.login.button_registr = QtWidgets.QPushButton(self.login) self.login.button_registr.setStyleSheet( 'border:none;background:{};color:{};padding:{}px;font-size:{}px;'. format( get_style('log_edblock_registr_color'), get_style('log_edblock_registr_text_color'), get_style('log_edblock_registr_padding'), get_style('log_edblock_registr_size'), )) self.login.button_registr.setText(get_lang('log_registration')) # set layout self.login.center_lay.addWidget(self.login.button_registr) # set cursor self.login.button_registr.setCursor(cursor2) # get Registration block self.regist = getattr(self, 'center_{}'.format(list(self.arr_id)[1])) # get user verification block self.check_code = getattr(self, 'center_{}'.format(list(self.arr_id)[2])) if self.url: # exit the program self.login.left_button.clicked.connect(self.close_program) # enter the program self.login.right_button.clicked.connect(self.user_enter) # go to registration panel self.login.button_registr.clicked.connect(self.show_center_regist) # back to login block self.regist.left_button.clicked.connect(self.show_center_login) # go to the user verification block self.regist.right_button.clicked.connect(self.show_center_code) # back to registration panel self.check_code.left_button.clicked.connect( self.show_center_regist) # add user self.check_code.right_button.clicked.connect(self.add_user) self.get_ip = socket.gethostbyname(socket.gethostname())
def show_center_code(self): #print(list(self.arr_id)[1]) '/api/already_ip/get/?ip_name=127.0.0.1:80001' url = "api/already_ip/get/?ip_name=" url2 = "api/user/" url3 = 'api/extra_user/get/?phone=' url4 = 'api/auth/users/' check_ip = requests.get(self.url + url + self.get_ip) check_ip_dict = json.loads(check_ip.content.decode('utf-8')) if check_ip_dict: self.regist.error_block.show() self.regist.error_block.setText(get_lang('login_error003')) else: # get text password_text = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][1])).edit.text() c_password_text = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][2])).edit.text() phone_text = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][4])).edit.text() email_text = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][3])).edit.text() username_text = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][0])).edit.text() # check validate fields if re.search(r'[^a-z0-9_]', username_text): self.regist.error_block.show() self.regist.error_block.setText(get_lang('login_error004.1')) elif len(username_text) > 20 or len(username_text) < 3: self.regist.error_block.show() self.regist.error_block.setText(get_lang('login_error004.2')) else: user = requests.get(self.url + url2 + '?username='******'utf-8')) if user_dict: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error004.3')) else: if '@' in email_text and '.' in email_text: user = requests.get(self.url + url2 + '?email=' + email_text) user_dict = json.loads(user.content.decode('utf-8')) if user_dict: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error005.1')) else: if len(phone_text) >= 9: phone_get = requests.get(self.url + url3 + phone_text) phone_dict = json.loads( phone_get.content.decode('utf-8')) if phone_dict: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error006.2')) else: err = validate_password(password_text) if err['ErrorPassword']: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error007.1')) else: if not password_text == c_password_text: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error007.2')) else: try: data = { 'username': username_text, 'password': password_text, 'email': email_text, } res = requests.post(self.url + url4, data=data) self.regist.hide() self.check_code.show() except: print("something error") else: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error006.1')) else: self.regist.error_block.show() self.regist.error_block.setText( get_lang('login_error005.2'))
def add_user(self): # get text password = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][1])).edit.text() phone = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][4])).edit.text() username = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[1], self.arr_id[list(self.arr_id)[1]][0])).edit.text() code_1 = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[2], self.arr_id[list(self.arr_id)[2]][0])).edit.text() code_2 = getattr( self, 'text_block_{}_{}'.format( list(self.arr_id)[2], self.arr_id[list(self.arr_id)[2]][1])).edit.text() url = 'api/auth/users/activation/' data = { 'uid': code_1, 'token': code_2, } try: res = requests.post(self.url + url, data=data) res_dict = json.loads(res.content.decode('utf-8')) self.check_code.error_block.show() self.check_code.error_block.setText(get_lang('login_error008')) print(res_dict) except: # login url = "api/auth/token/login/" url2 = "api/extra_user/post/" url3 = "api/already_ip/post/" url4 = "api/user/" data = { 'username': username, 'password': password, } res = requests.post(self.url + url, data=data) # get token token = json.loads(res.content.decode('utf-8')) # check token try: token['non_field_errors'] self.login.error_block.show() self.login.error_block.setText(get_lang('login_error002')) except KeyError: # get id for extra user fields get_id = requests.get(self.url + url4 + '?username='******'utf-8')) # for phone data2 = { 'user': int(get_id_dict[0]['id']), 'phone': int(phone), } # for ip data3 = { 'ip_name': self.get_ip, } headers = {'Authorization': 'Token ' + token["auth_token"]} requests.post(self.url + url2, data=data2, headers=headers) requests.post(self.url + url3, data=data3, headers=headers) # save cookie copy = open(BASE_DIR + r'\cookies\token.json', 'w') token['username'] = username token['password'] = password copy.write(json.dumps(token)) copy.close()