Spaces:
Runtime error
Runtime error
File size: 6,781 Bytes
352eac8 8e31d0d 6f78cec 352eac8 9063b65 352eac8 6f78cec 352eac8 6f78cec 23990d0 6f78cec 23990d0 6f78cec 23990d0 6f78cec c4893e3 6f78cec 23990d0 6f78cec 23990d0 6f78cec 352eac8 6f78cec 352eac8 6f78cec bf60dda 6f78cec bf60dda 6f78cec c4893e3 6f78cec 3700629 6f78cec 352eac8 1935825 352eac8 6f78cec 352eac8 6f78cec 352eac8 1935825 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
from telegram.ext.filters import Filters
from telegram.ext.messagehandler import MessageHandler
from telegram import Update, ParseMode
from telegram.ext import (Updater,
PicklePersistence,
CommandHandler,
CallbackQueryHandler,
CallbackContext,
ConversationHandler)
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ForceReply, ReplyKeyboardMarkup
import requests
import hashlib
import re
from bs4 import BeautifulSoup
bot_token = '5415345086:AAEpiZypEMxgEs5zMcyOBAx_CpT9iLcnE8s'
admin = 37087739
#############################################
EXPECT_STATUS, EXPECT_USERNAME, EXPECT_PASSWORD, EXPECT_SUBMIT, EXPECT_BACK, EXPECT_BUTTON_CLICK = range(6)
def start(update: Update, context: CallbackContext):
chat_id = update.effective_chat.id
text = ('به ربات پرتال دانشجویی خوش آمدید 🌹')
update.message.reply_text(text, reply_markup=main_keyboard)
def set_info_handler(update: Update, context: CallbackContext):
username = context.user_data.get('username', 'تنظیم نشده است')
password = context.user_data.get('password', 'تنظیم نشده است')
text = (f'نام کاربری: {username}\n'
f'رمز عبور: {password}\n\n'
'لطفا یک گزینه را انتخاب نمایید')
button = [ [InlineKeyboardButton('رمز عبور', callback_data='pass'),
InlineKeyboardButton('نام کاربری', callback_data='user')],
[InlineKeyboardButton('ورود و دریافت نمرات', callback_data='login_portal')],
[InlineKeyboardButton('بازگشت', callback_data='cancel')],
]
inline_keyboard = InlineKeyboardMarkup(button)
update.message.reply_text(text, reply_markup=inline_keyboard)
return EXPECT_BUTTON_CLICK
def button_click_handler(update: Update, context: CallbackContext):
chat_id = update.effective_chat.id
query = update.callback_query
query.answer()
query.delete_message()
if query.data == 'login_portal':
web_url = 'https://pooya.um.ac.ir/gateway/PuyaAuthenticate.php'
resp = session.get(web_url, headers=headers)
soup = BeautifulSoup(resp.content, 'html.parser')
img_src = soup.find('img', id='secimg')['src']
filename = 'C:/Users/Home/OneDrive/Desktop/captcha.png'
capcha_src = 'https://pooya.um.ac.ir' + img_src[2:]
context.user_data['captcha'] = capcha_src
context.bot.send_photo(chat_id, photo=capcha_src)
context.bot.send_message(chat_id, text='کد کپچا را وارد کنید', reply_markup=ForceReply())
return EXPECT_SUBMIT
elif query.data == 'user':
context.bot.send_message(chat_id, text='نام کاربری خود را وارد کنید', reply_markup=ForceReply())
return EXPECT_USERNAME
elif query.data == 'pass':
context.bot.send_message(chat_id, text='رمز عبور خود را وارد کنید', reply_markup=ForceReply())
return EXPECT_PASSWORD
elif query.data == 'cancel':
query.answer('Opeartion canceled!')
return ConversationHandler.END
def hash_password(text):
password = hashlib.md5()
password.update(text.encode('utf-8'))
return password.hexdigest()
def login_portal(update: Update, context: CallbackContext):
chat_id = update.effective_chat.id
captcha = update.message.text
USER = context.user_data['username']
PASS = context.user_data['password']
capcha_src = context.user_data['captcha']
login_data = { 'UserPassword': hash_password(PASS),
'pswdStatus': '',
'UserID': USER,
'DummyVar': '',
'rand2': capcha_src[capcha_src.find('rand2=')+6:],
'mysecpngco': captcha
}
context.bot.send_message(chat_id, text=login_data)
req_url = 'https://pooya.um.ac.ir/gateway/UserInterim.php'
resp = session.post(req_url, data=login_data)
if resp.status_code == 200:
grade_list = session.get('https://pooya.um.ac.ir/educ/educfac/stuShowEducationalLogFromGradeList.php', headers=headers)
soup = BeautifulSoup(grade_list.content, 'html.parser')
data = [item.text.splitlines() for item in soup.find_all('tr', bgcolor="#E8E8FF")]
mean = [item.text.splitlines() for item in soup.find_all('tr', bgcolor="#C4C4FF")][1][3]
mark = '\n'.join([f'{i+1}) {row[2]}, {row[5]} ({row[8]})' for i, row in enumerate(data)])
text = f'{mark}\nمعدل: {mean}'
context.bot.send_message(chat_id, text)
else:
print('Login faild!')
return ConversationHandler.END
def set_password(update: Update, context: CallbackContext):
context.user_data['password'] = update.message.text
update.message.reply_text('رمز عبور با موفقیت ثبت شد', reply_markup=main_keyboard)
return ConversationHandler.END
def set_username(update: Update, context: CallbackContext):
context.user_data['username'] = update.message.text
update.message.reply_text('نام کاربری با موفقیت ثبت شد', reply_markup=main_keyboard)
return ConversationHandler.END
def cancel(update: Update, context: CallbackContext):
update.message.reply_text('منوی اصلی', reply_markup=main_keyboard)
return ConversationHandler.END
#############################################
def captcha_url():
web_url = 'https://pooya.um.ac.ir/gateway/PuyaAuthenticate.php'
req_url = 'https://pooya.um.ac.ir/gateway/UserInterim.php'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
session = requests.session()
resp = session.get(web_url, headers=headers)
soup = BeautifulSoup(resp.content, 'html.parser')
img_src = soup.find('img', id='secimg')['src']
capcha_src = 'https://pooya.um.ac.ir' + img_src[2:]
return capcha_src
if __name__ == '__main__':
session = requests.session()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
pers = PicklePersistence(filename='mybot')
updater = Updater(token=bot_token, persistence=pers)
updater.dispatcher.add_handler(CommandHandler('start', start))
updater.dispatcher.add_handler(ConversationHandler(
entry_points=[MessageHandler(Filters.regex('ورود به پرتال دانشجویی'), set_info_handler)],
states={
EXPECT_USERNAME: [MessageHandler(Filters.text, set_username)],
EXPECT_PASSWORD: [MessageHandler(Filters.text, set_password)],
EXPECT_SUBMIT: [MessageHandler(Filters.text, login_portal)],
EXPECT_BUTTON_CLICK: [CallbackQueryHandler(button_click_handler)],
EXPECT_BACK : [CallbackQueryHandler('cancel', start)]
},
fallbacks=[MessageHandler(Filters.regex('cancel'), cancel)],
))
buttons = [['ورود به پرتال دانشجویی']]
main_buttons = [row[::-1] for row in buttons]
main_keyboard = ReplyKeyboardMarkup(main_buttons, one_time_keyboard=True, resize_keyboard=True)
updater.start_polling()
print('Bot started ..........') |