Improved everything
This commit is contained in:
parent
bb6b0b056c
commit
506c7c06c9
@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"locale": "uk",
|
"locale": "uk",
|
||||||
"owner": 0,
|
"owner": 0,
|
||||||
|
"age_allowed": 0,
|
||||||
|
"admin_group": 0,
|
||||||
"admins": [],
|
"admins": [],
|
||||||
"bot": {
|
"bot": {
|
||||||
"api_id": 0,
|
"api_id": 0,
|
||||||
|
1
data/applications.json
Normal file
1
data/applications.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
@ -23,15 +23,29 @@
|
|||||||
"question10": "Ну і нарешті, розкажи трохи про себе. Про хобі, чим тобі подобається займатись. Одним повідомленням, будь ласка.",
|
"question10": "Ну і нарешті, розкажи трохи про себе. Про хобі, чим тобі подобається займатись. Одним повідомленням, будь ласка.",
|
||||||
"question2_underage": "Вибач, але треба досягти віку {0} років, щоб приєднатись до нас. Такі обмеження існують для того, щоб всім у спільноті було цікаво одне з одним.",
|
"question2_underage": "Вибач, але треба досягти віку {0} років, щоб приєднатись до нас. Такі обмеження існують для того, щоб всім у спільноті було цікаво одне з одним.",
|
||||||
"question2_invalid": "Будь ласка, введи ціле число.",
|
"question2_invalid": "Будь ласка, введи ціле число.",
|
||||||
"question2_joke": "Тижпрограміст, ми так і поняли. Але будь ласка, введи реальне значення.",
|
"question2_joke": "Шутнік, ми так і поняли. Але будь ласка, введи реальне значення.",
|
||||||
"confirm": "Супер, дякуємо!\n\nБудь ласка, перевір правильність даних:\n{0}\n\nВсе правильно?",
|
"confirm": "Супер, дякуємо!\n\nБудь ласка, перевір правильність даних:\n{0}\n\nВсе правильно?",
|
||||||
|
"application_sent": "Дякуємо! Ми надіслали твою анкетку на перевірку. Ти отримаєш повідомлення як тільки її перевірять та приймуть рішення. До тих пір від тебе більше нічого не потребується. Гарного дня! :)",
|
||||||
|
"application_got": "Отримано анкету від `{0}`\n\nІм'я тг: `{1}`, `{2}`\nUserID: `{3}`\n\n**Дані анкети:**\n{4}",
|
||||||
"shutdown": "Вимкнення бота з підом `{0}`",
|
"shutdown": "Вимкнення бота з підом `{0}`",
|
||||||
"startup": "Запуск бота з підом `{0}`",
|
"startup": "Запуск бота з підом `{0}`",
|
||||||
"startup_downtime": "Запуск бота з підом `{0}` (лежав {1})",
|
"startup_downtime": "Запуск бота з підом `{0}` (лежав {1})",
|
||||||
"sub_yes": "✅ Подання схвалено та прийнято",
|
"sub_yes": "✅ Подання схвалено та прийнято",
|
||||||
"sub_no": "❌ Подання розглянуто та відхилено"
|
"sub_no": "❌ Подання розглянуто та відхилено",
|
||||||
|
"question_titles": {
|
||||||
|
"question1": "Ім'я/звертання:",
|
||||||
|
"question2": "Вік:",
|
||||||
|
"question3": "Проживаня:",
|
||||||
|
"question4": "Дізнався(лась) про холо:",
|
||||||
|
"question5": "Хололайв зацікавив:",
|
||||||
|
"question6": "Подобається контент:",
|
||||||
|
"question7": "Японські холодівчата:",
|
||||||
|
"question8": "Дивлюсь стріми:",
|
||||||
|
"question9": "Подобаються пісні:",
|
||||||
|
"question10": "Про себе:"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"keyboards": {
|
"keyboard": {
|
||||||
"welcome": [
|
"welcome": [
|
||||||
[
|
[
|
||||||
"Так, звісно"
|
"Так, звісно"
|
||||||
@ -69,6 +83,8 @@
|
|||||||
"button": {
|
"button": {
|
||||||
"sub_yes": "✅ Прийняти",
|
"sub_yes": "✅ Прийняти",
|
||||||
"sub_no": "❌ Відхилити",
|
"sub_no": "❌ Відхилити",
|
||||||
|
"sub_no_aggresive": "🤡 Відхилити (Токс)",
|
||||||
|
"sub_no_russian": "🇷🇺 Відхилити (Русак)",
|
||||||
"accepted": "✅ Прийнято",
|
"accepted": "✅ Прийнято",
|
||||||
"declined": "❌ Відхилено"
|
"declined": "❌ Відхилено"
|
||||||
},
|
},
|
||||||
|
169
main.py
169
main.py
@ -1,4 +1,3 @@
|
|||||||
import asyncio
|
|
||||||
from time import time
|
from time import time
|
||||||
from os import getpid, listdir, remove
|
from os import getpid, listdir, remove
|
||||||
from modules.utils import *
|
from modules.utils import *
|
||||||
@ -9,11 +8,13 @@ from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, BotComman
|
|||||||
from pyrogram import idle # type: ignore
|
from pyrogram import idle # type: ignore
|
||||||
from pyrogram.errors.exceptions import bad_request_400
|
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 = 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):
|
async def cmd_start(app, msg):
|
||||||
|
|
||||||
try:
|
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_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))
|
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):
|
async def cmd_kill(app, msg):
|
||||||
|
|
||||||
if (msg.from_user.id == configGet("owner")) or (msg.from_user.id in configGet("admins")):
|
if (msg.from_user.id == configGet("owner")) or (msg.from_user.id in configGet("admins")):
|
||||||
logWrite(f"Shutting down bot with pid {pid}")
|
logWrite(f"Shutting down bot with pid {pid}")
|
||||||
await msg.reply_text(f"Вимкнення бота з підом `{pid}`")
|
await msg.reply_text(f"Вимкнення бота з підом `{pid}`")
|
||||||
killProc(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):
|
async def welcome_pass(app, msg, once_again: bool = True):
|
||||||
|
|
||||||
if not once_again:
|
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")))
|
await msg.reply_text(locale("question1", "message"), reply_markup=ForceReply(placeholder=locale("question1", "force_reply")))
|
||||||
configSet("stage", 1, file=str(msg.from_user.id))
|
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):
|
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):
|
async def confirm_yes(app, msg):
|
||||||
|
|
||||||
user_stage = configGet("stage", file=str(msg.from_user.id))
|
user_stage = configGet("stage", file=str(msg.from_user.id))
|
||||||
|
|
||||||
if user_stage == 10:
|
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("sent", True, file=str(msg.from_user.id))
|
||||||
configSet("application_date", int(time()), 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):
|
async def confirm_no(app, msg):
|
||||||
|
|
||||||
user_stage = configGet("stage", file=str(msg.from_user.id))
|
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_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))
|
configSet("telegram_locale", str(msg.from_user.language_code), file=str(msg.from_user.id))
|
||||||
await welcome_pass(app, msg, once_again=True)
|
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):
|
async def any_stage(app, msg):
|
||||||
|
|
||||||
user_stage = configGet("stage", file=str(msg.from_user.id))
|
user_stage = configGet("stage", file=str(msg.from_user.id))
|
||||||
@ -88,8 +200,13 @@ async def any_stage(app, msg):
|
|||||||
elif user_stage == 2:
|
elif user_stage == 2:
|
||||||
try:
|
try:
|
||||||
configSet(str(user_stage), int(msg.text), "application", file=str(msg.from_user.id))
|
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")))
|
if (int(msg.text) in [-1, 0, 128, 256, 512, 1024, 2048]) or (int(msg.text) >= 100):
|
||||||
configSet("stage", user_stage+1, file=str(msg.from_user.id))
|
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:
|
except ValueError:
|
||||||
await msg.reply_text(locale(f"question2_invalid", "message"), reply_markup=ForceReply(placeholder=locale(f"question{user_stage}", "force_reply")))
|
await msg.reply_text(locale(f"question2_invalid", "message"), reply_markup=ForceReply(placeholder=locale(f"question{user_stage}", "force_reply")))
|
||||||
else:
|
else:
|
||||||
@ -100,7 +217,12 @@ async def any_stage(app, msg):
|
|||||||
else:
|
else:
|
||||||
if not configGet("sent", file=str(msg.from_user.id)):
|
if not configGet("sent", file=str(msg.from_user.id)):
|
||||||
if not configGet("confirmed", 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(str(user_stage), str(msg.text), "application", file=str(msg.from_user.id))
|
||||||
#configSet("sent", True, 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))
|
#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!")
|
await msg.reply_text("You are already done, wait!")
|
||||||
else:
|
else:
|
||||||
await msg.reply_text("You are already done, wait!")
|
await msg.reply_text("You are already done, wait!")
|
||||||
|
# ==============================================================================================================================
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
@ -120,16 +243,16 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
app.send_message(configGet("owner"), f"Starting up with pid `{pid}`") # type: ignore
|
app.send_message(configGet("owner"), f"Starting up with pid `{pid}`") # type: ignore
|
||||||
|
|
||||||
# Registering user commands for fallback locale
|
# # Registering user commands
|
||||||
commands_list = []
|
# commands_list = []
|
||||||
for command in configGet("commands"):
|
# for command in configGet("commands"):
|
||||||
commands_list.append(BotCommand(command, configGet("commands")[command]))
|
# commands_list.append(BotCommand(command, configGet("commands")[command]))
|
||||||
app.set_bot_commands(commands_list) # type: ignore
|
# app.set_bot_commands(commands_list) # type: ignore
|
||||||
|
|
||||||
# Registering admin commands
|
# Registering admin commands
|
||||||
commands_admin_list = []
|
commands_admin_list = []
|
||||||
for command in configGet("commands"):
|
# for command in configGet("commands"):
|
||||||
commands_admin_list.append(BotCommand(command, configGet("commands")[command]))
|
# commands_admin_list.append(BotCommand(command, configGet("commands")[command]))
|
||||||
|
|
||||||
for command in configGet("commands_admin"):
|
for command in configGet("commands_admin"):
|
||||||
commands_admin_list.append(BotCommand(command, configGet("commands_admin")[command]))
|
commands_admin_list.append(BotCommand(command, configGet("commands_admin")[command]))
|
||||||
|
Reference in New Issue
Block a user