code untuk bot tele
unknown
plain_text
a year ago
4.4 kB
5
Indexable
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, ContextTypes
import re
# In-memory user data store
user_data = {}
# Function to start the bot
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text('Selamat datang! Masukkan NIM Anda untuk memulai.')
# Function to handle help command
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
help_text = (
"Berikut adalah perintah yang dapat Anda gunakan:\n"
"/start - Memulai percakapan dengan bot.\n"
"/help - Menampilkan informasi tentang cara menggunakan bot ini.\n"
"Masukkan NIM Anda (10 digit) untuk mengakses dan menyimpan informasi akademik.\n"
"Format yang dapat digunakan:\n"
"1. 'jadwal [isi_jadwal]' untuk memasukkan jadwal kuliah Anda.\n"
"2. 'ipk [nilai_ipk]' untuk memasukkan IPK Anda.\n"
"3. 'tampilkan data' untuk melihat informasi yang telah disimpan.\n"
)
await update.message.reply_text(help_text)
# Function to identify user intent
def identify_intent(user_input: str) -> str:
user_input = user_input.lower()
if re.match(r'^\d{10}$', user_input): # Assuming NIM is a 10-digit numeric string
return 'nim_input'
elif user_input.startswith("jadwal"):
return 'input_jadwal'
elif user_input.startswith("ipk"):
return 'input_ipk'
elif user_input == "tampilkan data":
return 'tampilkan_data'
else:
return 'unknown'
# Function to respond based on identified intent
async def respond_to_query(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
user_input = update.message.text
intent = identify_intent(user_input)
if intent == 'nim_input':
nim = user_input.strip()
if nim not in user_data:
await update.message.reply_text(f"NIM {nim} tidak ditemukan. Silakan masukkan nama Anda:")
context.user_data['current_nim'] = nim
return
else:
response = f"Data untuk NIM {nim}:\n" \
f"Nama: {user_data[nim]['name']}\n" \
f"Jadwal Kuliah:\n{user_data[nim].get('jadwal', 'Belum diinput')}\n" \
f"IPK: {user_data[nim].get('ipk', 'Belum diinput')}"
await update.message.reply_text(response)
elif 'current_nim' in context.user_data:
name = user_input.strip()
nim = context.user_data['current_nim']
user_data[nim] = {'name': name}
await update.message.reply_text(f"Data untuk NIM {nim} telah dibuat. Silakan masukkan jadwal kuliah Anda:")
del context.user_data['current_nim']
return
elif intent == 'input_ipk':
if 'current_nim' in context.user_data:
ipk = user_input.replace("ipk ", "").strip()
nim = context.user_data['current_nim']
user_data[nim]['ipk'] = ipk
await update.message.reply_text(f"IPK untuk NIM {nim} telah disimpan.")
del context.user_data['current_nim'] # Clear current NIM
return
elif intent == 'tampilkan_data':
if 'current_nim' in context.user_data:
nim = context.user_data['current_nim']
response = f"Data untuk NIM {nim}:\n" \
f"Nama: {user_data[nim]['name']}\n" \
f"Jadwal Kuliah:\n{user_data[nim].get('jadwal', 'Belum diinput')}\n" \
f"IPK: {user_data[nim].get('ipk', 'Belum diinput')}"
await update.message.reply_text(response)
return
else:
await update.message.reply_text("Maaf, saya tidak mengerti pertanyaan Anda. Silakan coba lagi atau gunakan /help untuk bantuan.")
# Main function to run the bot
def main() -> None:
application = ApplicationBuilder().token("7549195522:AAEEML7iq1OeMN5Z0jgWq1vt0sluFy1Yp34").build() # Replace with your bot's token
# Add command handlers
application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("help", help_command))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, respond_to_query))
# Start the bot
application.run_polling()
if __name__ == '__main__':
main()
Editor is loading...
Leave a Comment