コード例 #1
0
def command_delete(message):
	ctx.push()
	day_deep = 7 # определяет глубину записей за 7 дней от сегодня
	cid = message.chat.id
	text=message.text.replace('/','')
	user_id = OriginSystemUsers.query.filter_by(system_userid=str(cid)).first().id_users
	cur_session = check_user_seesion(user_id)
	if cur_session is not None:
		session_disabled(user_id)	
	cdo(UserSession(id_users=user_id, id_botcommand=botCommands[text]['id']))
	current_date = date.today()
	begin_date = current_date + timedelta(days = ((-1)*day_deep))
	result = user_records_format(user_records(user_id, begin_date, current_date))
	if result is None:
		bot.send_message(cid,
		 'За последние {} дней не было внесено новых данных'.format(day_deep),
		  reply_markup=keyboard_commands)
		ctx.pop()
		return 0

	message_text = 'В системе за 7 дней есть записи: \n '+result + '\n для удаления записи пришли ее ID. например, 5'

	bot.send_message(cid, message_text, reply_markup=keyboard_commands)
	
	ctx.pop()
	return 0
コード例 #2
0
def command_new(message):
    cid = message.chat.id
    user_id = OriginSystemUsers.query.filter_by(system_userid=str(cid)).first().id_users
    cur_session = check_user_seesion(user_id)
    if cur_session is not None:
    	session_disabled(user_id)
    cdo(UserSession(id_users=user_id, id_botcommand=botCommands[message.text]['id']))
    bot.send_message(cid, 'Пришли мне, пожалуйста, название нового вида спорта')
    return 0
コード例 #3
0
def command_add(message):
	ctx.push()
	cid = message.chat.id
	text=message.text.replace('/','')
	user_id = OriginSystemUsers.query.filter_by(system_userid=str(cid)).first().id_users
	cur_session = check_user_seesion(user_id)
	if cur_session is not None:
		session_disabled(user_id)	
	cdo(UserSession(id_users=user_id, id_botcommand=botCommands[text]['id']))
	bot.send_message(cid, sports_gr_commands, reply_markup=keyboard_commands)
	
	ctx.pop()
	return 0
コード例 #4
0
def command_start(message):
	ctx.push()
	cid = message.chat.id
	usname = message.from_user.username
	text = message.text.replace('/','')
	if usname is None:
		bot.send_message(cid, "Наш бот работает c использованием Telegram username. \n Пожалуйста, заполни это поле в настройках Telegram и повторно вызови команду /start .")
		return 0


	if not User.query.filter_by(name=usname).first():  # if user hasn't used the "/start" command yet:
		cdo(User(name=usname, id_originsystem=gi(OriginSystem, messenger)))
		cdo(OriginSystemUsers(system_username=usname, system_userid=cid, id_users=gi(User, usname), id_originsystem=gi(OriginSystem, messenger)))
		#bot.send_message(cid, "Привет! Теперь мы познакомились ) \n Выбери команду внизу или нажми /help для вызова списка доступных команд", reply_markup=keyboard_commands)
		bot.send_message(cid, "Привет! Пришли имя для отображения в рейтинге (не более 30 символов)")
		ctx.pop()
		return 0
	else:
		user_info = User.query.filter_by(name=usname).first()
		if user_info.display_name == 'bot_anonymous':

			cur_session = check_user_seesion(user_info.id)
			if cur_session is not None:
				session_disabled(user_info.id)	
			cdo(UserSession(id_users=user_info.id, id_botcommand=botCommands[text]['id']))
			bot.send_message(cid, "Привет! Пришли имя для отображения в рейтинге (не более 30 символов)")
			ctx.pop()
			return 0
		bot.send_message(cid,
			"Привет, {}! \n Выбери команду внизу или нажми /help для вызова списка доступных команд.".format(user_info.display_name),
		 reply_markup=keyboard_commands)
		ctx.pop()
		return 0
コード例 #5
0
def command_sport(message):
	ctx.push()
	cid=message.chat.id
	user_id = OriginSystemUsers.query.filter_by(system_userid=str(cid)).first().id_users
	cur_session = check_user_seesion(user_id)
	if cur_session is None:
		bot.send_message(cid,
		 "Тебе для начала нужно выбрать команду. \n Для вызова списка доступных команд воспользуйся командой /help",
			reply_markup=keyboard_commands)
		ctx.pop()
		return 0	
	surveys_id = Surveys.query.filter_by(name=message.text.replace('/','')).first().id
	if current_survey_for_user(user_id) is not  None:
		current_survey_all_obj_disable(user_id)

	cdo(CurrentSurvey(
		id_surveys=surveys_id,
		id_users=user_id,
		user_time=datetime.fromtimestamp((int(message.date))).strftime('%Y-%m-%d'),
		question_quantity=qn(Surveys.query.filter_by(name=message.text.replace('/','')).first().id)
		))
	if cur_session.id_botcommand == botCommands['add']['id']:

		cdo(CurrentQuestion(
			id_currentsurvey=CurrentSurvey.query.filter_by(id_users=user_id).order_by(CurrentSurvey.timestamp.desc()).first().id,
			id_surveyquestion=SurveysQuestion.query.filter_by(id_surveys=surveys_id, question_index=1).first().id
			))

	if cur_session.id_botcommand == botCommands['add_to_date']['id']:

		cdo(CurrentQuestion(
			id_currentsurvey=CurrentSurvey.query.filter_by(id_users=user_id).order_by(CurrentSurvey.timestamp.desc()).first().id,
			id_surveyquestion=SurveysQuestion.query.filter_by(id_surveys=surveys_id, question_index=0).first().id
			))

	bot.send_message(cid, cq(user_id), reply_markup=keyboard_commands)
	current_question_flag_update(user_id, 'questionsend', 1)
	ctx.pop()
	return 0
コード例 #6
0
def get_text_messages(message):
	ctx.push()
	cid = message.chat.id
	user_id = OriginSystemUsers.query.filter_by(system_userid=str(cid)).first().id_users
	cur_session = check_user_seesion(user_id)
	if cur_session is None:
		bot.send_message(cid,
		 "Тебе для начала нужно выбрать команду. \n Для вызова списка доступных команд воспользуйся командой /help",
			reply_markup=keyboard_commands)
		ctx.pop()
		return 0
	if message.text[0] == '/':
		bot.send_message(cid, "Тебе необходимо выбрать сначала команду из доступных. \n Для списка доступных команд воспользуйся \n /help", reply_markup=keyboard_commands)
		ctx.pop()
		return 0

	if cur_session.id_botcommand == botCommands['add']['id']:

		cur_survey = CurrentSurvey.query.filter_by(
		id_users=user_id, state=0
		).order_by(CurrentSurvey.timestamp.desc()).first()
				
		current_question = CurrentQuestion.query.filter_by(
							id_currentsurvey=cur_survey.id, state=0, answerreceive=0).order_by(
						CurrentQuestion.id.desc()).first()
		
		question_base=SurveysQuestion.query.filter_by(
						id=current_question.id_surveyquestion).first()	

		survey = Surveys.query.filter_by(id=cur_survey.id_surveys).first()	
		users_number = User.query.filter_by(is_active=True).count()	

		if question_base.question_index == 1:
			try:
				float(message.text)
			except:
				bot.send_message(cid,
			 "Тебе необходимо прислать ответ в чиловом формате, например 5.4",
				reply_markup=keyboard_commands)
				ctx.pop()
				return 0

		if question_base.question_index == 2:
			try:
				int(message.text)
			except:
				bot.send_message(cid,
			 "Тебе необходимо прислать ответ в целочисленном формате, например 5",
				reply_markup=keyboard_commands)
				ctx.pop()
				return 0

		if question_base.question_index == 3:
			if message.text in (places.values()):
				pass
			else:
				bot.send_message(cid,
			 "Выбери из доступных (см. клавиатуру внизу)",
				reply_markup=keyboard_places)
				ctx.pop()
				return 0


	
		if current_question.reply ==0 and question_base.question_index == 1:
			if float(message.text) < sport_coef[survey.name]['bottom'] or float(message.text) > sport_coef[survey.name]['upper']:
				bot.send_message(cid,
				 'Пожалуйстаб проверь, что значение введено правильно. \n Еще раз отправь ответ на вопрос',
				  reply_markup=keyboard_commands)
				cur_question_reply_flag(current_question.id)
				ctx.pop()
				return 0
		if current_question.reply ==0 and question_base.question_index == 2:
			if float(message.text) > users_number:
				bot.send_message(cid,
					'Пожалуйстаб проверь, что значение введено правильно (Нас сейчас {} спортсменов). \n Еще раз отправь ответ на вопрос'.format(users_number),
					reply_markup=keyboard_commands)
				cur_question_reply_flag(current_question.id)
				ctx.pop()
				return 0	

		current_question_answer_proccess(user_id, message.text)
		current_question_flag_update(user_id, 'state', 1)
		current_survey_step_update(user_id)	
		


		while cur_survey.step<(cur_survey.question_quantity-1): #костыль -1

		
			cdo(CurrentQuestion(
				id_currentsurvey=cur_survey.id,
				id_surveyquestion=SurveysQuestion.query.filter_by(
					id_surveys=survey.id,
					question_index=question_base.question_index+1
					).first().id
				))
			if (question_base.question_index+1)==3:				
				bot.send_message(cid, cq(user_id), reply_markup=keyboard_places)
			else:
				bot.send_message(cid, cq(user_id), reply_markup=keyboard_commands)	

			current_question_flag_update(user_id, 'questionsend', 1)
			ctx.pop()
			return 0	

		current_survey_state_update(user_id, cur_survey.id)
		current_user_session_upgrade(user_id)
		db.session.commit()
		question = CurrentQuestion.query.filter_by(id_currentsurvey=cur_survey.id).order_by(CurrentQuestion.id)
		sport_name = survey.name	
	

		if float(question[0].result) < sport_coef[sport_name]['cr']:
			score=(1+group_coef*int(question[1].result))*(float(question[0].result)*sport_coef[sport_name]['c1'])
		else:
			score =(1+group_coef*int(question[1].result))*(float(question[0].result)*sport_coef[sport_name]['c2'])

		

		if cur_survey.question_quantity ==4:
			id_place = Place.query.filter_by(name=question[2].result).first().id
		else:
			id_place=1	

		cdo(SurveyResult(
			parameter_1=abs(float(question[0].result)),
			id_quest_1=question[0].id_surveyquestion,
			parameter_2=abs(int(question[1].result)),
			id_quest_2=question[1].id_surveyquestion,
			date=cur_survey.user_time,
			id_users=user_id,
			id_currentsurvey=cur_survey.id,
			id_surveys=cur_survey.id_surveys,
			score=round(score,1),
			id_place=id_place
			))
		bot.send_message(cid, 'Твои данные внесены, получено {} баллов! \n Если ты хочешь добавить еще тренировку, нажми  /add'.format(round(score,1)), reply_markup=keyboard_commands)
		ctx.pop()	

		return 0

	if cur_session.id_botcommand == botCommands['add_to_date']['id']:
		cur_survey = CurrentSurvey.query.filter_by(
		id_users=user_id, state=0
		).order_by(CurrentSurvey.timestamp.desc()).first()
				
		current_question = CurrentQuestion.query.filter_by(
							id_currentsurvey=cur_survey.id, state=0, answerreceive=0).order_by(
						CurrentQuestion.id.desc()).first()
		
		question_base=SurveysQuestion.query.filter_by(
						id=current_question.id_surveyquestion).first()	

		survey = Surveys.query.filter_by(id=cur_survey.id_surveys).first()

		if question_base.question_index==0:
			new_date = findall(r'(\d+)', message.text)
			
			try:
				new_date = '{}-{}-{}'.format(date.today().year, new_date[0], new_date[1])
				new_date=datetime.strptime(new_date, '%Y-%m-%d')
				
			except:
				bot.send_message(cid,
			 ('Дата введена в неправильно формате! \n'+ 'Правильный формат месяц.день\n'+
			 	'Пример: 08.17'),
				reply_markup=keyboard_commands)
				ctx.pop()
				return 0
			
			if new_date.date() < (date.today() + timedelta(days = (-10))) or new_date.date() > date.today():
					
				bot.send_message(cid,
			 ('Дата не может быть больше текущей даты: {} \n, или меньше, чем {} \n '.format((date.today()),(date.today() + timedelta(days = (-10))))+
			  'Пришли дату повторно'),
				reply_markup=keyboard_commands)
				ctx.pop()
				return 0

			current_question_answer_proccess(user_id, new_date)
			current_question_flag_update(user_id, 'state', 1)
			current_survey_step_update(user_id)
			cdo(CurrentQuestion(
				id_currentsurvey=cur_survey.id,
				id_surveyquestion=SurveysQuestion.query.filter_by(
					id_surveys=survey.id,
					question_index=question_base.question_index+1
					).first().id
				))
			bot.send_message(cid, cq(user_id), reply_markup=keyboard_commands)	
			current_question_flag_update(user_id, 'questionsend', 1)
			ctx.pop()
			return 0

		if question_base.question_index==1:
			try:
				float(message.text)
			except:
				bot.send_message(cid,
			 "Тебе необходимо прислать ответ в чиcловом формате, например 5.4",
				reply_markup=keyboard_commands)
				ctx.pop()
				return 0

		if question_base.question_index==2:
			try:
				int(message.text)
			except:
				bot.send_message(cid,
			 "Тебе необходимо прислать ответ в чиcловом формате, например 5",
				reply_markup=keyboard_commands)
				ctx.pop()
				return 0

		if question_base.question_index == 3:
			if message.text in (places.values()):
				pass
			else:
				bot.send_message(cid,
			 "Выбери из доступных (см. клавиатуру внизу)",
				reply_markup=keyboard_places)
				ctx.pop()
				return 0

		users_number = User.query.filter_by(is_active=True).count()	
	
		if current_question.reply ==0 and question_base.question_index == 1:
			if float(message.text) < sport_coef[survey.name]['bottom'] or float(message.text) > sport_coef[survey.name]['upper']:
				bot.send_message(cid,
				 'Пожалуйстаб проверь, что значение введено правильно. \n Еще раз отправь ответ на вопрос',
				  reply_markup=keyboard_commands)
				cur_question_reply_flag(current_question.id)
				ctx.pop()
				return 0
		if current_question.reply ==0 and question_base.question_index == 2:
			if float(message.text) > users_number:
				bot.send_message(cid,
					'Пожалуйстаб проверь, что значение введено правильно (Нас сейчас {} спортсменов). \n Еще раз отправь ответ на вопрос'.format(users_number),
					reply_markup=keyboard_commands)
				cur_question_reply_flag(current_question.id)
				ctx.pop()
				return 0	

		current_question_answer_proccess(user_id, message.text)
		current_question_flag_update(user_id, 'state', 1)
		current_survey_step_update(user_id)	

		while cur_survey.step<cur_survey.question_quantity:
		
			cdo(CurrentQuestion(
				id_currentsurvey=cur_survey.id,
				id_surveyquestion=SurveysQuestion.query.filter_by(
					id_surveys=survey.id,
					question_index=question_base.question_index+1
					).first().id
				))
						
			if (question_base.question_index+1)==3:			
				bot.send_message(cid, cq(user_id), reply_markup=keyboard_places)
			else:
				bot.send_message(cid, cq(user_id), reply_markup=keyboard_commands)	
			current_question_flag_update(user_id, 'questionsend', 1)
			ctx.pop()
			return 0	

		current_survey_state_update(user_id, cur_survey.id)
		current_user_session_upgrade(user_id)
		db.session.commit()
		question = CurrentQuestion.query.filter_by(id_currentsurvey=cur_survey.id).order_by(CurrentQuestion.id)
		sport_name = survey.name	
	

		if float(question[1].result) < sport_coef[sport_name]['cr']:
			score=(1+group_coef*int(question[2].result))*(float(question[1].result)*sport_coef[sport_name]['c1'])
		else:
			score =(1+group_coef*int(question[2].result))*(float(question[1].result)*sport_coef[sport_name]['c2'])	

		if cur_survey.question_quantity ==4:
			id_place = Place.query.filter_by(name=question[3].result).first().id
		else:
			id_place=1

		cdo(SurveyResult(
			parameter_1=abs(float(question[1].result)),
			id_quest_1=question[1].id_surveyquestion,
			parameter_2=abs(int(question[2].result)),
			id_quest_2=question[2].id_surveyquestion,
			date=question[0].result,
			id_users=user_id,
			id_currentsurvey=cur_survey.id,
			id_surveys=cur_survey.id_surveys,
			score=round(score,1),
			id_place = id_place
			))

		bot.send_message(cid, 'Твои данные внесены, получено {} баллов! \n Если ты хочешь добавить еще тренировку, нажми  /add'.format(round(score,1)), reply_markup=keyboard_commands)
		try:
			correct_analytical_result(user_id,User.query.filter_by(id=user_id).first().name,question[0].result)
		except:
			print('Google not update, CurrentSurvey ID={}'.format(cur_survey.id))

		ctx.pop()	

		return 0




	if cur_session.id_botcommand == botCommands['delete']['id']:
		try:
			int(message.text)
		except:
			bot.send_message(cid,
		 "Тебе необходимо прислать ответ в целочисленном формате, например, 5",
			reply_markup=keyboard_commands)
			ctx.pop()
			return 0
		current_date = date.today()
		begin_date = current_date + timedelta(days = (-5))
		#result = user_records(user_id, begin_date, current_date)
		if int(message.text) in [item[0] for item in user_records(user_id,begin_date, current_date)]:
			record_date = datetime.strftime(SurveyResult.query.filter_by(id=int(message.text)).first().date, '%Y-%m-%d %H:%M:%S')
			user_record_delete(int(message.text), user_id)
			current_user_session_upgrade(user_id)
			db.session.commit()
			bot.send_message(cid,
		 ("ID {} удалена").format(message.text),
			reply_markup=keyboard_commands)
			
			try:
				correct_analytical_result(user_id, User.query.filter_by(id=user_id).first().name,record_date)
			except:
				print('Google not update, CurrentSurvey ID={}'.format(cur_survey.id))

			ctx.pop()
			return 0
		else:
			bot.send_message(cid,
		 "Тебе необходимо прислать ID из присланного списка",
			reply_markup=keyboard_commands)
			ctx.pop()
			return 0
		
		ctx.pop()
		return 0		
		

	if cur_session.id_botcommand == botCommands['start']['id']:
		user_display_name_update(user_id, message.text)
		current_user_session_upgrade(user_id)
		db.session.commit()
		bot.send_message(cid,
		 "Привет, {}! \n Выбери команду внизу или нажми /help для вызова списка доступных команд." .format(message.text),
			reply_markup=keyboard_commands)
		ctx.pop()
		return 0