Improved everything
This commit is contained in:
parent
bb6b0b056c
commit
506c7c06c9
@ -1,6 +1,8 @@
|
||||
{
|
||||
"locale": "uk",
|
||||
"owner": 0,
|
||||
"age_allowed": 0,
|
||||
"admin_group": 0,
|
||||
"admins": [],
|
||||
"bot": {
|
||||
"api_id": 0,
|
||||
|
1
data/applications.json
Normal file
1
data/applications.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
@ -23,15 +23,29 @@
|
||||
"question10": "Ну і нарешті, розкажи трохи про себе. Про хобі, чим тобі подобається займатись. Одним повідомленням, будь ласка.",
|
||||
"question2_underage": "Вибач, але треба досягти віку {0} років, щоб приєднатись до нас. Такі обмеження існують для того, щоб всім у спільноті було цікаво одне з одним.",
|
||||
"question2_invalid": "Будь ласка, введи ціле число.",
|
||||
"question2_joke": "Тижпрограміст, ми так і поняли. Але будь ласка, введи реальне значення.",
|
||||
"question2_joke": "Шутнік, ми так і поняли. Але будь ласка, введи реальне значення.",
|
||||
"confirm": "Супер, дякуємо!\n\nБудь ласка, перевір правильність даних:\n{0}\n\nВсе правильно?",
|
||||
"application_sent": "Дякуємо! Ми надіслали твою анкетку на перевірку. Ти отримаєш повідомлення як тільки її перевірять та приймуть рішення. До тих пір від тебе більше нічого не потребується. Гарного дня! :)",
|
||||
"application_got": "Отримано анкету від `{0}`\n\nІм'я тг: `{1}`, `{2}`\nUserID: `{3}`\n\n**Дані анкети:**\n{4}",
|
||||
"shutdown": "Вимкнення бота з підом `{0}`",
|
||||
"startup": "Запуск бота з підом `{0}`",
|
||||
"startup_downtime": "Запуск бота з підом `{0}` (лежав {1})",
|
||||
"sub_yes": "✅ Подання схвалено та прийнято",
|
||||
"sub_no": "❌ Подання розглянуто та відхилено"
|
||||
"sub_no": "❌ Подання розглянуто та відхилено",
|
||||
"question_titles": {
|
||||
"question1": "Ім'я/звертання:",
|
||||
"question2": "Вік:",
|
||||
"question3": "Проживаня:",
|
||||
"question4": "Дізнався(лась) про холо:",
|
||||
"question5": "Хололайв зацікавив:",
|
||||
"question6": "Подобається контент:",
|
||||
"question7": "Японські холодівчата:",
|
||||
"question8": "Дивлюсь стріми:",
|
||||
"question9": "Подобаються пісні:",
|
||||
"question10": "Про себе:"
|
||||
}
|
||||
},
|
||||
"keyboards": {
|
||||
"keyboard": {
|
||||
"welcome": [
|
||||
[
|
||||
"Так, звісно"
|
||||
@ -69,6 +83,8 @@
|
||||
"button": {
|
||||
"sub_yes": "✅ Прийняти",
|
||||
"sub_no": "❌ Відхилити",
|
||||
"sub_no_aggresive": "🤡 Відхилити (Токс)",
|
||||
"sub_no_russian": "🇷🇺 Відхилити (Русак)",
|
||||
"accepted": "✅ Прийнято",
|
||||
"declined": "❌ Відхилено"
|
||||
},
|
||||
|
169
main.py
169
main.py
@ -1,4 +1,3 @@
|
||||
import asyncio
|
||||
from time import time
|
||||
from os import getpid, listdir, remove
|
||||
from modules.utils import *
|
||||
@ -9,11 +8,13 @@ from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, BotComman
|
||||
from pyrogram import idle # type: ignore
|
||||
from pyrogram.errors.exceptions import bad_request_400
|
||||
|
||||
pid = getpid()
|
||||
|
||||
pid = getpid()
|
||||
app = Client("holochecker", bot_token=configGet("bot_token", "bot"), api_id=configGet("api_id", "bot"), api_hash=configGet("api_hash", "bot"))
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.command(["start"], prefixes=["/"]))
|
||||
|
||||
# Start command ================================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["start"], prefixes=["/"]))
|
||||
async def cmd_start(app, msg):
|
||||
|
||||
try:
|
||||
@ -28,17 +29,23 @@ async def cmd_start(app, msg):
|
||||
configSet("telegram_phone", str(msg.from_user.phone_number), file=str(msg.from_user.id))
|
||||
configSet("telegram_locale", str(msg.from_user.language_code), file=str(msg.from_user.id))
|
||||
|
||||
await msg.reply_text(locale("start", "message"), reply_markup=ReplyKeyboardMarkup(locale("welcome", "keyboards"), resize_keyboard=True))
|
||||
await msg.reply_text(locale("start", "message"), reply_markup=ReplyKeyboardMarkup(locale("welcome", "keyboard"), resize_keyboard=True))
|
||||
# ==============================================================================================================================
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.command(["kill", "die", "reboot"], prefixes=["", "/"]))
|
||||
|
||||
# Shutdown command =============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["kill", "die", "reboot"], prefixes=["", "/"]))
|
||||
async def cmd_kill(app, msg):
|
||||
|
||||
if (msg.from_user.id == configGet("owner")) or (msg.from_user.id in configGet("admins")):
|
||||
logWrite(f"Shutting down bot with pid {pid}")
|
||||
await msg.reply_text(f"Вимкнення бота з підом `{pid}`")
|
||||
killProc(pid)
|
||||
# ==============================================================================================================================
|
||||
|
||||
@app.on_message(~ filters.scheduled & (filters.regex(locale("welcome", "keyboards")[0][0]) | filters.regex(locale("return", "keyboards")[0][0])))
|
||||
|
||||
# Welcome check ================================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("welcome", "keyboard")[0][0]) | filters.regex(locale("return", "keyboard")[0][0])))
|
||||
async def welcome_pass(app, msg, once_again: bool = True):
|
||||
|
||||
if not once_again:
|
||||
@ -47,23 +54,67 @@ async def welcome_pass(app, msg, once_again: bool = True):
|
||||
await msg.reply_text(locale("question1", "message"), reply_markup=ForceReply(placeholder=locale("question1", "force_reply")))
|
||||
configSet("stage", 1, file=str(msg.from_user.id))
|
||||
|
||||
@app.on_message(~ filters.scheduled & (filters.regex(locale("welcome", "keyboards")[1][0])))
|
||||
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("welcome", "keyboard")[1][0])))
|
||||
async def welcome_reject(app, msg):
|
||||
|
||||
await msg.reply_text(locale("goodbye", "message"), reply_markup=ReplyKeyboardMarkup(locale("return", "keyboards"), resize_keyboard=True))
|
||||
await msg.reply_text(locale("goodbye", "message"), reply_markup=ReplyKeyboardMarkup(locale("return", "keyboard"), resize_keyboard=True))
|
||||
# ==============================================================================================================================
|
||||
|
||||
@app.on_message(~ filters.scheduled & (filters.regex(locale("confirm", "keyboards")[0][0])))
|
||||
|
||||
# Confirmation =================================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("confirm", "keyboard")[0][0])))
|
||||
async def confirm_yes(app, msg):
|
||||
|
||||
user_stage = configGet("stage", file=str(msg.from_user.id))
|
||||
|
||||
if user_stage == 10:
|
||||
await msg.reply_text("Alright! You did it!", reply_markup=ReplyKeyboardRemove())
|
||||
# send to admins
|
||||
|
||||
await msg.reply_text(locale("application_sent", "message"), reply_markup=ReplyKeyboardRemove())
|
||||
|
||||
applications = jsonLoad(f"data{sep}applications.json")
|
||||
|
||||
applications[str(msg.from_user.id)] = {
|
||||
"approved": False,
|
||||
"approved_by": None,
|
||||
"approval_date": None,
|
||||
"refused": False,
|
||||
"refused_by": False,
|
||||
"refusal_date": False,
|
||||
"application_date": int(time()),
|
||||
"application": configGet("application", file=str(msg.from_user.id))
|
||||
}
|
||||
|
||||
jsonSave(applications, f"data{sep}applications.json")
|
||||
|
||||
application_content = []
|
||||
i = 1
|
||||
|
||||
for question in configGet("application", file=str(msg.from_user.id)):
|
||||
application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {configGet('application', file=str(msg.from_user.id))[question]}")
|
||||
i += 1
|
||||
|
||||
await app.send_message(chat_id=configGet("admin_group"), text=(locale("application_got", "message")).format(str(msg.from_user.id), msg.from_user.first_name, msg.from_user.last_name, msg.from_user.username, "\n".join(application_content)), reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(text=locale("sub_yes", "button"), callback_data=f"sub_yes_{msg.from_user.id}")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text=locale("sub_no", "button"), callback_data=f"sub_no_{msg.from_user.id}")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text=locale("sub_no_aggresive", "button"), callback_data=f"sub_no_aggresive_{msg.from_user.id}")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text=locale("sub_no_russian", "button"), callback_data=f"sub_no_russian_{msg.from_user.id}")
|
||||
]
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
configSet("sent", True, file=str(msg.from_user.id))
|
||||
configSet("application_date", int(time()), file=str(msg.from_user.id))
|
||||
|
||||
@app.on_message(~ filters.scheduled & (filters.regex(locale("confirm", "keyboards")[1][0])))
|
||||
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("confirm", "keyboard")[1][0])))
|
||||
async def confirm_no(app, msg):
|
||||
|
||||
user_stage = configGet("stage", file=str(msg.from_user.id))
|
||||
@ -75,8 +126,69 @@ async def confirm_no(app, msg):
|
||||
configSet("telegram_phone", str(msg.from_user.phone_number), file=str(msg.from_user.id))
|
||||
configSet("telegram_locale", str(msg.from_user.language_code), file=str(msg.from_user.id))
|
||||
await welcome_pass(app, msg, once_again=True)
|
||||
# ==============================================================================================================================
|
||||
|
||||
@app.on_message(~ filters.scheduled)
|
||||
|
||||
# Callbacks ====================================================================================================================
|
||||
@app.on_callback_query(filters.regex("sub_yes_[\s\S]*"))
|
||||
async def callback_query_accept(app, clb):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
user_locale = clb.from_user.language_code
|
||||
|
||||
await app.send_message(configGet("admin_group"), f"Approved by {clb.from_user.id}")
|
||||
await app.send_message(int(fullclb[2]), "You got approved")
|
||||
|
||||
edited_markup = [[InlineKeyboardButton(text=locale("accepted", "button"), callback_data="nothing")]]
|
||||
|
||||
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
|
||||
await clb.answer(text=locale("sub_block", "callback", locale=user_locale).format(fullclb[2]), show_alert=True)
|
||||
|
||||
@app.on_callback_query(filters.regex("sub_no_[\s\S]*"))
|
||||
async def callback_query_refuse(app, clb):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
user_locale = clb.from_user.language_code
|
||||
|
||||
await app.send_message(configGet("admin_group"), f"Refused by {clb.from_user.id}")
|
||||
await app.send_message(int(fullclb[2]), "You got refused")
|
||||
|
||||
edited_markup = [[InlineKeyboardButton(text=locale("declined", "button"), callback_data="nothing")]]
|
||||
|
||||
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
|
||||
await clb.answer(text=locale("sub_block", "callback", locale=user_locale).format(fullclb[2]), show_alert=True)
|
||||
|
||||
@app.on_callback_query(filters.regex("sub_no_aggresive_[\s\S]*"))
|
||||
async def callback_query_refuse(app, clb):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
user_locale = clb.from_user.language_code
|
||||
|
||||
await app.send_message(configGet("admin_group"), f"Refused by {clb.from_user.id}")
|
||||
await app.send_message(int(fullclb[2]), "You got refused")
|
||||
|
||||
edited_markup = [[InlineKeyboardButton(text=locale("declined", "button"), callback_data="nothing")]]
|
||||
|
||||
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
|
||||
await clb.answer(text=locale("sub_block", "callback", locale=user_locale).format(fullclb[2]), show_alert=True)
|
||||
|
||||
@app.on_callback_query(filters.regex("sub_no_russian_[\s\S]*"))
|
||||
async def callback_query_refuse(app, clb):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
user_locale = clb.from_user.language_code
|
||||
|
||||
await app.send_message(configGet("admin_group"), f"Refused by {clb.from_user.id}")
|
||||
await app.send_message(int(fullclb[2]), "You got refused")
|
||||
|
||||
edited_markup = [[InlineKeyboardButton(text=locale("declined", "button"), callback_data="nothing")]]
|
||||
|
||||
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
|
||||
await clb.answer(text=locale("sub_block", "callback", locale=user_locale).format(fullclb[2]), show_alert=True)
|
||||
# ==============================================================================================================================
|
||||
|
||||
# Any other input ==============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private)
|
||||
async def any_stage(app, msg):
|
||||
|
||||
user_stage = configGet("stage", file=str(msg.from_user.id))
|
||||
@ -88,8 +200,13 @@ async def any_stage(app, msg):
|
||||
elif user_stage == 2:
|
||||
try:
|
||||
configSet(str(user_stage), int(msg.text), "application", file=str(msg.from_user.id))
|
||||
await msg.reply_text(locale(f"question{user_stage+1}", "message"), reply_markup=ForceReply(placeholder=locale(f"question{user_stage+1}", "force_reply")))
|
||||
configSet("stage", user_stage+1, file=str(msg.from_user.id))
|
||||
if (int(msg.text) in [-1, 0, 128, 256, 512, 1024, 2048]) or (int(msg.text) >= 100):
|
||||
await msg.reply_text(locale("question2_joke", "message"), reply_markup=ForceReply(placeholder=locale("question2", "force_reply")))
|
||||
elif int(msg.text) < configGet("age_allowed"):
|
||||
await msg.reply_text(locale("question2_underage", "message"), reply_markup=ForceReply(placeholder=locale("question2", "force_reply")))
|
||||
else:
|
||||
await msg.reply_text(locale(f"question{user_stage+1}", "message"), reply_markup=ForceReply(placeholder=locale(f"question{user_stage+1}", "force_reply")))
|
||||
configSet("stage", user_stage+1, file=str(msg.from_user.id))
|
||||
except ValueError:
|
||||
await msg.reply_text(locale(f"question2_invalid", "message"), reply_markup=ForceReply(placeholder=locale(f"question{user_stage}", "force_reply")))
|
||||
else:
|
||||
@ -100,7 +217,12 @@ async def any_stage(app, msg):
|
||||
else:
|
||||
if not configGet("sent", file=str(msg.from_user.id)):
|
||||
if not configGet("confirmed", file=str(msg.from_user.id)):
|
||||
await msg.reply_text(locale("confirm", "message"), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboards"), resize_keyboard=True))
|
||||
application_content = []
|
||||
i = 1
|
||||
for question in configGet("application", file=str(msg.from_user.id)):
|
||||
application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {configGet('application', file=str(msg.from_user.id))[question]}")
|
||||
i += 1
|
||||
await msg.reply_text(locale("confirm", "message").format("\n".join(application_content)), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboard"), resize_keyboard=True))
|
||||
configSet(str(user_stage), str(msg.text), "application", file=str(msg.from_user.id))
|
||||
#configSet("sent", True, file=str(msg.from_user.id))
|
||||
#configSet("application_date", int(time()), file=str(msg.from_user.id))
|
||||
@ -108,6 +230,7 @@ async def any_stage(app, msg):
|
||||
await msg.reply_text("You are already done, wait!")
|
||||
else:
|
||||
await msg.reply_text("You are already done, wait!")
|
||||
# ==============================================================================================================================
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -120,16 +243,16 @@ if __name__ == "__main__":
|
||||
|
||||
app.send_message(configGet("owner"), f"Starting up with pid `{pid}`") # type: ignore
|
||||
|
||||
# Registering user commands for fallback locale
|
||||
commands_list = []
|
||||
for command in configGet("commands"):
|
||||
commands_list.append(BotCommand(command, configGet("commands")[command]))
|
||||
app.set_bot_commands(commands_list) # type: ignore
|
||||
# # Registering user commands
|
||||
# commands_list = []
|
||||
# for command in configGet("commands"):
|
||||
# commands_list.append(BotCommand(command, configGet("commands")[command]))
|
||||
# app.set_bot_commands(commands_list) # type: ignore
|
||||
|
||||
# Registering admin commands
|
||||
commands_admin_list = []
|
||||
for command in configGet("commands"):
|
||||
commands_admin_list.append(BotCommand(command, configGet("commands")[command]))
|
||||
# for command in configGet("commands"):
|
||||
# commands_admin_list.append(BotCommand(command, configGet("commands")[command]))
|
||||
|
||||
for command in configGet("commands_admin"):
|
||||
commands_admin_list.append(BotCommand(command, configGet("commands_admin")[command]))
|
||||
|
Reference in New Issue
Block a user