Compare commits
6 Commits
6b80b7d0fa
...
496bb7d4a6
Author | SHA1 | Date | |
---|---|---|---|
|
496bb7d4a6 | ||
|
b437092fe7 | ||
|
9431763e6b | ||
|
4977b8f31a | ||
|
0739eeb87d | ||
|
0214a29a2e |
17
README.md
17
README.md
@ -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
|
||||
|
@ -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"
|
||||
]
|
||||
|
@ -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 *
|
||||
|
@ -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))
|
||||
|
@ -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)
|
@ -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)
|
||||
|
@ -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)
|
@ -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)}")
|
Reference in New Issue
Block a user