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
|
"enabled": true
|
||||||
},
|
},
|
||||||
"warnings": {
|
"warnings": {
|
||||||
"enabled": false
|
"enabled": true
|
||||||
},
|
},
|
||||||
"invites_check": {
|
"invites_check": {
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
"dinovoice": {
|
"dinovoice": {
|
||||||
"enabled": false
|
"enabled": false
|
||||||
|
},
|
||||||
|
"spoilers": {
|
||||||
|
"enabled": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scheduler": {
|
"scheduler": {
|
||||||
@ -117,12 +120,22 @@ You can see config file with all the comments below:
|
|||||||
"general"
|
"general"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"spoiler": {
|
||||||
|
"permissions": [
|
||||||
|
"users",
|
||||||
|
"admins"
|
||||||
|
],
|
||||||
|
"modules": [
|
||||||
|
"spoilers"
|
||||||
|
]
|
||||||
|
},
|
||||||
"cancel": {
|
"cancel": {
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"users",
|
"users",
|
||||||
"admins"
|
"admins"
|
||||||
],
|
],
|
||||||
"modules": [
|
"modules": [
|
||||||
|
"spoilers",
|
||||||
"applications",
|
"applications",
|
||||||
"sponsorships"
|
"sponsorships"
|
||||||
]
|
]
|
||||||
@ -229,7 +242,7 @@ After all of that you're good to go! Happy using :)
|
|||||||
|
|
||||||
* [ ] Stats and infographics
|
* [ ] Stats and infographics
|
||||||
* [ ] Check group members without completed application
|
* [ ] Check group members without completed application
|
||||||
* [ ] Replicate some functions of @spoilerobot
|
* [x] Replicate some functions of @spoilerobot
|
||||||
* [x] Check sponsorship on Holo girls
|
* [x] Check sponsorship on Holo girls
|
||||||
* [x] /nearby command
|
* [x] /nearby command
|
||||||
* [x] Complete messenger between user and admins
|
* [x] Complete messenger between user and admins
|
||||||
|
@ -42,13 +42,16 @@
|
|||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
"warnings": {
|
"warnings": {
|
||||||
"enabled": false
|
"enabled": true
|
||||||
},
|
},
|
||||||
"invites_check": {
|
"invites_check": {
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
"dinovoice": {
|
"dinovoice": {
|
||||||
"enabled": false
|
"enabled": false
|
||||||
|
},
|
||||||
|
"spoilers": {
|
||||||
|
"enabled": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scheduler": {
|
"scheduler": {
|
||||||
@ -91,6 +94,9 @@
|
|||||||
"permissions": [
|
"permissions": [
|
||||||
"users",
|
"users",
|
||||||
"admins"
|
"admins"
|
||||||
|
],
|
||||||
|
"modules": [
|
||||||
|
"spoilers"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"cancel": {
|
"cancel": {
|
||||||
@ -99,6 +105,7 @@
|
|||||||
"admins"
|
"admins"
|
||||||
],
|
],
|
||||||
"modules": [
|
"modules": [
|
||||||
|
"spoilers",
|
||||||
"applications",
|
"applications",
|
||||||
"sponsorships"
|
"sponsorships"
|
||||||
]
|
]
|
||||||
|
@ -37,9 +37,9 @@ from modules.callbacks.sus import *
|
|||||||
from modules.handlers.confirmation import *
|
from modules.handlers.confirmation import *
|
||||||
from modules.handlers.contact import *
|
from modules.handlers.contact import *
|
||||||
from modules.handlers.group_join import *
|
from modules.handlers.group_join import *
|
||||||
from modules.handlers.sponsorship import *
|
|
||||||
from modules.handlers.voice import *
|
from modules.handlers.voice import *
|
||||||
from modules.handlers.welcome import *
|
from modules.handlers.welcome import *
|
||||||
|
from modules.handlers.sponsorship import *
|
||||||
from modules.handlers.everything import *
|
from modules.handlers.everything import *
|
||||||
|
|
||||||
from modules.scheduled import *
|
from modules.scheduled import *
|
||||||
|
@ -3,6 +3,7 @@ from pyrogram import filters
|
|||||||
from pyrogram.types import Message, ForceReply
|
from pyrogram.types import Message, ForceReply
|
||||||
from pyrogram.client import Client
|
from pyrogram.client import Client
|
||||||
from classes.holo_user import HoloUser, UserInvalidError, UserNotFoundError
|
from classes.holo_user import HoloUser, UserInvalidError, UserNotFoundError
|
||||||
|
from modules.logging import logWrite
|
||||||
from modules.utils import locale
|
from modules.utils import locale
|
||||||
from modules.database import col_spoilers
|
from modules.database import col_spoilers
|
||||||
from modules import custom_filters
|
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)))
|
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:
|
else:
|
||||||
await msg.reply_text(locale("spoiler_unfinished", "message", locale=msg.from_user))
|
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 os import path
|
||||||
from app import isAnAdmin
|
from app import isAnAdmin
|
||||||
from modules.utils import configGet, jsonLoad
|
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 import filters
|
||||||
from pyrogram.types import Message
|
from pyrogram.types import Message
|
||||||
|
|
||||||
@ -35,6 +35,9 @@ async def enabled_invites_check_func(_, __, msg: Message):
|
|||||||
async def enabled_dinovoice_func(_, __, msg: Message):
|
async def enabled_dinovoice_func(_, __, msg: Message):
|
||||||
return configGet("enabled", "features", "dinovoice")
|
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)
|
admin = filters.create(admin_func)
|
||||||
member = filters.create(member_func)
|
member = filters.create(member_func)
|
||||||
allowed = filters.create(allowed_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_sponsorships = filters.create(enabled_sponsorships_func)
|
||||||
enabled_warnings = filters.create(enabled_warnings_func)
|
enabled_warnings = filters.create(enabled_warnings_func)
|
||||||
enabled_invites_check = filters.create(enabled_invites_check_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:
|
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}} )
|
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)))
|
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
|
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}} )
|
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)))
|
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
|
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}} )
|
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)))
|
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
|
return
|
||||||
|
|
||||||
if spoiler["photo"] is None and spoiler["video"] is None and spoiler["animation"] is None and spoiler["text"] is None:
|
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}} )
|
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)))
|
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:
|
else:
|
||||||
for lc in all_locales("spoiler_description", "keyboard"):
|
for lc in all_locales("spoiler_description", "keyboard"):
|
||||||
if msg.text == lc[-1][0]:
|
if msg.text == lc[-1][0]:
|
||||||
@ -89,6 +95,7 @@ async def any_stage(app: Client, msg: Message):
|
|||||||
return
|
return
|
||||||
if msg.text != "-":
|
if msg.text != "-":
|
||||||
col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"description": msg.text, "completed": True}} )
|
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_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__()}")]]))
|
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):
|
async def message_in_group(app: Client, msg: Message):
|
||||||
if (msg.chat is not None) and (msg.via_bot is not None):
|
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.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:
|
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")
|
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)
|
await asyncio.sleep(configGet("remove_application_time")*60)
|
||||||
|
@ -5,11 +5,12 @@ from pyrogram.client import Client
|
|||||||
from classes.holo_user import HoloUser
|
from classes.holo_user import HoloUser
|
||||||
from modules import custom_filters
|
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):
|
async def sponsor_proof(app: Client, msg: Message):
|
||||||
|
|
||||||
if msg.via_bot is None:
|
if msg.via_bot is None:
|
||||||
|
|
||||||
holo_user = HoloUser(msg.from_user)
|
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 os import listdir, makedirs, path, sep
|
||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from ujson import dumps
|
||||||
from app import app
|
from app import app
|
||||||
from pyrogram.types import BotCommand, BotCommandScopeChat
|
from pyrogram.types import BotCommand, BotCommandScopeChat
|
||||||
from pyrogram.errors import bad_request_400
|
from pyrogram.errors import bad_request_400
|
||||||
@ -109,6 +110,14 @@ async def commands_register():
|
|||||||
"locales": {}
|
"locales": {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
commands_raw = {
|
||||||
|
"users": [],
|
||||||
|
"admins": [],
|
||||||
|
"group_users": [],
|
||||||
|
"group_admins": [],
|
||||||
|
"locales": {}
|
||||||
|
}
|
||||||
|
|
||||||
valid_locales = []
|
valid_locales = []
|
||||||
files_locales = listdir(f'{configGet("locale", "locations")}')
|
files_locales = listdir(f'{configGet("locale", "locations")}')
|
||||||
|
|
||||||
@ -121,6 +130,13 @@ async def commands_register():
|
|||||||
"group_users": [],
|
"group_users": [],
|
||||||
"group_admins": []
|
"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_modules = configGet("features")
|
||||||
config_commands = configGet("commands")
|
config_commands = configGet("commands")
|
||||||
@ -135,13 +151,26 @@ async def commands_register():
|
|||||||
enabled = True
|
enabled = True
|
||||||
|
|
||||||
if enabled is False:
|
if enabled is False:
|
||||||
|
if configGet("debug") is True:
|
||||||
|
logWrite(f"Not registering {command} at all")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for permission in config_commands[command]["permissions"]:
|
for permission in config_commands[command]["permissions"]:
|
||||||
|
|
||||||
commands[permission].append(BotCommand(command, locale("commands")[command]))
|
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:
|
for lc in valid_locales:
|
||||||
|
|
||||||
commands["locales"][lc][permission].append(BotCommand(command, locale("commands", locale=lc)[command]))
|
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
|
# Registering user commands
|
||||||
await app.set_bot_commands(commands["users"])
|
await app.set_bot_commands(commands["users"])
|
||||||
@ -155,7 +184,7 @@ async def commands_register():
|
|||||||
# Registering admin/owner commands
|
# Registering admin/owner commands
|
||||||
for admin in configGet("admins")+[configGet("owner")]:
|
for admin in configGet("admins")+[configGet("owner")]:
|
||||||
try:
|
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"):
|
if admin == configGet("owner"):
|
||||||
logWrite(f"Registered admin commands for owner {configGet('owner')}")
|
logWrite(f"Registered admin commands for owner {configGet('owner')}")
|
||||||
else:
|
else:
|
||||||
@ -175,4 +204,8 @@ async def commands_register():
|
|||||||
await app.set_bot_commands(commands["group_users"], scope=BotCommandScopeChat(chat_id=configGet("users", "groups")))
|
await app.set_bot_commands(commands["group_users"], scope=BotCommandScopeChat(chat_id=configGet("users", "groups")))
|
||||||
logWrite("Registered destination group commands")
|
logWrite("Registered destination group commands")
|
||||||
except bad_request_400.ChannelInvalid:
|
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