Compare commits

...

6 Commits

Author SHA1 Message Date
Profitroll
496bb7d4a6 Improved logging 2023-01-04 21:58:44 +01:00
Profitroll
b437092fe7 Trying to find commands registration issue 2023-01-04 21:58:20 +01:00
Profitroll
9431763e6b Added filling_sponsorship filter 2023-01-04 21:57:11 +01:00
Profitroll
4977b8f31a Updated to-do list 2023-01-04 21:56:54 +01:00
Profitroll
0739eeb87d Updated config 2023-01-04 21:56:37 +01:00
Profitroll
0214a29a2e Fixed handlers 2023-01-04 21:55:50 +01:00
8 changed files with 86 additions and 12 deletions

View File

@ -72,13 +72,16 @@ You can see config file with all the comments below:
"enabled": true
},
"warnings": {
"enabled": false
"enabled": true
},
"invites_check": {
"enabled": true
},
"dinovoice": {
"enabled": false
},
"spoilers": {
"enabled": true
}
},
"scheduler": {
@ -117,12 +120,22 @@ You can see config file with all the comments below:
"general"
]
},
"spoiler": {
"permissions": [
"users",
"admins"
],
"modules": [
"spoilers"
]
},
"cancel": {
"permissions": [
"users",
"admins"
],
"modules": [
"spoilers",
"applications",
"sponsorships"
]
@ -229,7 +242,7 @@ After all of that you're good to go! Happy using :)
* [ ] Stats and infographics
* [ ] Check group members without completed application
* [ ] Replicate some functions of @spoilerobot
* [x] Replicate some functions of @spoilerobot
* [x] Check sponsorship on Holo girls
* [x] /nearby command
* [x] Complete messenger between user and admins

View File

@ -42,13 +42,16 @@
"enabled": true
},
"warnings": {
"enabled": false
"enabled": true
},
"invites_check": {
"enabled": true
},
"dinovoice": {
"enabled": false
},
"spoilers": {
"enabled": true
}
},
"scheduler": {
@ -91,6 +94,9 @@
"permissions": [
"users",
"admins"
],
"modules": [
"spoilers"
]
},
"cancel": {
@ -99,6 +105,7 @@
"admins"
],
"modules": [
"spoilers",
"applications",
"sponsorships"
]

View File

@ -37,9 +37,9 @@ from modules.callbacks.sus import *
from modules.handlers.confirmation import *
from modules.handlers.contact import *
from modules.handlers.group_join import *
from modules.handlers.sponsorship import *
from modules.handlers.voice import *
from modules.handlers.welcome import *
from modules.handlers.sponsorship import *
from modules.handlers.everything import *
from modules.scheduled import *

View File

@ -3,6 +3,7 @@ from pyrogram import filters
from pyrogram.types import Message, ForceReply
from pyrogram.client import Client
from classes.holo_user import HoloUser, UserInvalidError, UserNotFoundError
from modules.logging import logWrite
from modules.utils import locale
from modules.database import col_spoilers
from modules import custom_filters
@ -33,6 +34,7 @@ async def cmd_spoiler(app: Client, msg: Message):
)
await msg.reply_text(locale("spoiler_started", "message", locale=msg.from_user), reply_markup=ForceReply(placeholder=locale("spoiler_content", "force_reply", locale=msg.from_user)))
logWrite(f"User {msg.from_user.id} started creating new spoiler")
else:
await msg.reply_text(locale("spoiler_unfinished", "message", locale=msg.from_user))

View File

@ -4,7 +4,7 @@ usage in context of Holo Users."""
from os import path
from app import isAnAdmin
from modules.utils import configGet, jsonLoad
from modules.database import col_applications
from modules.database import col_applications, col_tmp
from pyrogram import filters
from pyrogram.types import Message
@ -35,6 +35,9 @@ async def enabled_invites_check_func(_, __, msg: Message):
async def enabled_dinovoice_func(_, __, msg: Message):
return configGet("enabled", "features", "dinovoice")
async def filling_sponsorship_func(_, __, msg: Message):
return True if col_tmp.find_one({"user": msg.from_user.id, "type": "sponsorship"}) is not None else False
admin = filters.create(admin_func)
member = filters.create(member_func)
allowed = filters.create(allowed_func)
@ -44,4 +47,6 @@ enabled_applications = filters.create(enabled_applications_func)
enabled_sponsorships = filters.create(enabled_sponsorships_func)
enabled_warnings = filters.create(enabled_warnings_func)
enabled_invites_check = filters.create(enabled_invites_check_func)
enabled_dinovoice = filters.create(enabled_dinovoice_func)
enabled_dinovoice = filters.create(enabled_dinovoice_func)
filling_sponsorship = filters.create(filling_sponsorship_func)

View File

@ -69,19 +69,25 @@ async def any_stage(app: Client, msg: Message):
if msg.photo is not None:
col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"photo": msg.photo.file_id}} )
await msg.reply_text(locale("spoiler_send_description", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("spoiler_description", "keyboard"), resize_keyboard=True, one_time_keyboard=True, placeholder=locale("spoiler_description", "force_reply", locale=msg.from_user)))
logWrite(f"Adding photo with id {msg.photo.file_id} to {msg.from_user.id}'s spoiler")
return
elif msg.video is not None:
if msg.video is not None:
col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"video": msg.video.file_id}} )
await msg.reply_text(locale("spoiler_send_description", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("spoiler_description", "keyboard"), resize_keyboard=True, one_time_keyboard=True, placeholder=locale("spoiler_description", "force_reply", locale=msg.from_user)))
logWrite(f"Adding video with id {msg.video.file_id} to {msg.from_user.id}'s spoiler")
return
elif msg.animation is not None:
if msg.animation is not None:
col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"animation": msg.animation.file_id}} )
await msg.reply_text(locale("spoiler_send_description", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("spoiler_description", "keyboard"), resize_keyboard=True, one_time_keyboard=True, placeholder=locale("spoiler_description", "force_reply", locale=msg.from_user)))
logWrite(f"Adding animation with id {msg.animation.file_id} to {msg.from_user.id}'s spoiler")
return
if spoiler["photo"] is None and spoiler["video"] is None and spoiler["animation"] is None and spoiler["text"] is None:
col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"text": msg.text}} )
await msg.reply_text(locale("spoiler_send_description", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("spoiler_description", "keyboard"), resize_keyboard=True, one_time_keyboard=True, placeholder=locale("spoiler_description", "force_reply", locale=msg.from_user)))
logWrite(f"Adding text '{msg.text}' to {msg.from_user.id}'s spoiler")
else:
for lc in all_locales("spoiler_description", "keyboard"):
if msg.text == lc[-1][0]:
@ -89,6 +95,7 @@ async def any_stage(app: Client, msg: Message):
return
if msg.text != "-":
col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"description": msg.text, "completed": True}} )
logWrite(f"Adding description '{msg.text}' to {msg.from_user.id}'s spoiler")
await msg.reply_text(locale("spoiler_using_description", "message", locale=msg.from_user).format(msg.text), reply_markup=ReplyKeyboardRemove())
await msg.reply_text(locale("spoiler_ready", "message", locale=msg.from_user), quote=False, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("spoiler_send", "button", locale=msg.from_user), switch_inline_query=f"spoiler:{spoiler['_id'].__str__()}")]]))
@ -154,6 +161,12 @@ async def any_stage(app: Client, msg: Message):
async def message_in_group(app: Client, msg: Message):
if (msg.chat is not None) and (msg.via_bot is not None):
if (msg.via_bot.id == (await app.get_me()).id) and (msg.chat.id == configGet("users", "groups")):
if msg.text.startswith(locale("spoiler_described", "message").split()[0]) or msg.text.startswith(locale("spoiler_empty", "message").split()[0]):
try:
await msg.forward(configGet("users", "groups"), disable_notification=True)
except:
pass
return
if configGet("remove_application_time") > 0:
logWrite(f"User {msg.from_user.id} requested application in destination group, removing in {configGet('remove_application_time')} minutes")
await asyncio.sleep(configGet("remove_application_time")*60)

View File

@ -5,11 +5,12 @@ from pyrogram.client import Client
from classes.holo_user import HoloUser
from modules import custom_filters
@app.on_message(custom_filters.enabled_sponsorships & ~filters.scheduled & filters.photo & filters.private)
@app.on_message(custom_filters.enabled_sponsorships & custom_filters.filling_sponsorship & ~filters.scheduled & filters.private)
async def sponsor_proof(app: Client, msg: Message):
if msg.via_bot is None:
holo_user = HoloUser(msg.from_user)
await holo_user.sponsorship_next(msg.text, msg=msg, photo=msg.photo)
if msg.photo is not None:
await holo_user.sponsorship_next(msg.text, msg=msg, photo=msg.photo)

View File

@ -4,6 +4,7 @@ some scheduled tasks is the main idea of this module"""
from os import listdir, makedirs, path, sep
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from datetime import datetime, timedelta
from ujson import dumps
from app import app
from pyrogram.types import BotCommand, BotCommandScopeChat
from pyrogram.errors import bad_request_400
@ -109,6 +110,14 @@ async def commands_register():
"locales": {}
}
commands_raw = {
"users": [],
"admins": [],
"group_users": [],
"group_admins": [],
"locales": {}
}
valid_locales = []
files_locales = listdir(f'{configGet("locale", "locations")}')
@ -121,6 +130,13 @@ async def commands_register():
"group_users": [],
"group_admins": []
}
if configGet("debug") is True:
commands_raw["locales"][".".join(entry.split(".")[:-1])] = {
"users": [],
"admins": [],
"group_users": [],
"group_admins": []
}
config_modules = configGet("features")
config_commands = configGet("commands")
@ -135,13 +151,26 @@ async def commands_register():
enabled = True
if enabled is False:
if configGet("debug") is True:
logWrite(f"Not registering {command} at all")
continue
for permission in config_commands[command]["permissions"]:
commands[permission].append(BotCommand(command, locale("commands")[command]))
if configGet("debug") is True:
commands_raw[permission].append({f"{command}": locale("commands")[command]})
logWrite(f"Registering {command} for {permission}")
for lc in valid_locales:
commands["locales"][lc][permission].append(BotCommand(command, locale("commands", locale=lc)[command]))
if configGet("debug") is True:
commands_raw["locales"][lc][permission].append({f"{command}": locale("commands", locale=lc)[command]})
logWrite(f"Registering {command} for {permission} [{lc}]")
# Registering user commands
await app.set_bot_commands(commands["users"])
@ -155,7 +184,7 @@ async def commands_register():
# Registering admin/owner commands
for admin in configGet("admins")+[configGet("owner")]:
try:
await app.set_bot_commands(commands["admins"], scope=BotCommandScopeChat(chat_id=admin))
await app.set_bot_commands(commands["admins"]+commands["users"], scope=BotCommandScopeChat(chat_id=admin))
if admin == configGet("owner"):
logWrite(f"Registered admin commands for owner {configGet('owner')}")
else:
@ -175,4 +204,8 @@ async def commands_register():
await app.set_bot_commands(commands["group_users"], scope=BotCommandScopeChat(chat_id=configGet("users", "groups")))
logWrite("Registered destination group commands")
except bad_request_400.ChannelInvalid:
logWrite(f"Could not register commands for destination group. Bot is likely not in the group.")
logWrite(f"Could not register commands for destination group. Bot is likely not in the group.")
if configGet("debug") is True:
logWrite(f"Complete commands registration:\n{dumps(commands_raw, indent=4, ensure_ascii=False, encode_html_chars=False)}")