Spaces:
Sleeping
Sleeping
Merge pull request #106 from Gojo-Bots/main
Browse files- .github/workflows/check_requirements.yml +26 -0
- .github/workflows/pre-commit-autoupdate.yml +1 -1
- .gitignore +1 -0
- .pre-commit-config.yaml +1 -1
- Powers/__main__.py +2 -2
- Powers/bot_class.py +0 -9
- Powers/plugins/admin.py +1 -1
- Powers/plugins/dev.py +1 -8
- Powers/plugins/giveaway.py +19 -4
- Powers/utils/http_helper.py +23 -20
- Powers/utils/msg_types.py +2 -2
- Powers/vars.py +1 -1
- requirements.txt +3 -3
.github/workflows/check_requirements.yml
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Check requirements
|
2 |
+
|
3 |
+
on: [push, pull_request]
|
4 |
+
|
5 |
+
jobs:
|
6 |
+
check_requirements:
|
7 |
+
runs-on: ubuntu-latest
|
8 |
+
|
9 |
+
strategy:
|
10 |
+
matrix:
|
11 |
+
python-version: [">=3.9"]
|
12 |
+
|
13 |
+
steps:
|
14 |
+
- name: Checkout code
|
15 |
+
uses: actions/checkout@v3
|
16 |
+
|
17 |
+
- name: Set up Python environment
|
18 |
+
uses: actions/setup-python@v4
|
19 |
+
with:
|
20 |
+
python-version: ${{ matrix.python-version }}
|
21 |
+
|
22 |
+
- name: Install dependencies
|
23 |
+
run: pip install -r requirements.txt
|
24 |
+
|
25 |
+
- name: Check for conflicting libraries
|
26 |
+
run: pip check
|
.github/workflows/pre-commit-autoupdate.yml
CHANGED
@@ -15,7 +15,7 @@ jobs:
|
|
15 |
- name: Run pre-commit autoupdate
|
16 |
run: pre-commit autoupdate
|
17 |
- name: Create Pull Request
|
18 |
-
uses: peter-evans/create-pull-request@
|
19 |
with:
|
20 |
token: ${{ secrets.GITHUB_TOKEN }}
|
21 |
branch: update/pre-commit-autoupdate
|
|
|
15 |
- name: Run pre-commit autoupdate
|
16 |
run: pre-commit autoupdate
|
17 |
- name: Create Pull Request
|
18 |
+
uses: peter-evans/create-pull-request@v5
|
19 |
with:
|
20 |
token: ${{ secrets.GITHUB_TOKEN }}
|
21 |
branch: update/pre-commit-autoupdate
|
.gitignore
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
*.session
|
2 |
*.session-journal
|
3 |
Powers/config.py
|
|
|
4 |
.vscode/
|
5 |
postgres-data/
|
6 |
*.env
|
|
|
1 |
*.session
|
2 |
*.session-journal
|
3 |
Powers/config.py
|
4 |
+
Powers/vars.py
|
5 |
.vscode/
|
6 |
postgres-data/
|
7 |
*.env
|
.pre-commit-config.yaml
CHANGED
@@ -12,7 +12,7 @@ repos:
|
|
12 |
- id: check-merge-conflict
|
13 |
|
14 |
- repo: https://github.com/psf/black
|
15 |
-
rev: 23.
|
16 |
hooks:
|
17 |
- id: black
|
18 |
language_version: python3
|
|
|
12 |
- id: check-merge-conflict
|
13 |
|
14 |
- repo: https://github.com/psf/black
|
15 |
+
rev: 23.3.0
|
16 |
hooks:
|
17 |
- id: black
|
18 |
language_version: python3
|
Powers/__main__.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
import uvloop # Comment it out if using on windows
|
2 |
|
3 |
from Powers.bot_class import Gojo
|
4 |
|
5 |
if __name__ == "__main__":
|
6 |
-
uvloop.install() # Comment it out if using on windows
|
7 |
Gojo().run()
|
|
|
1 |
+
#import uvloop # Comment it out if using on windows
|
2 |
|
3 |
from Powers.bot_class import Gojo
|
4 |
|
5 |
if __name__ == "__main__":
|
6 |
+
#uvloop.install() # Comment it out if using on windows
|
7 |
Gojo().run()
|
Powers/bot_class.py
CHANGED
@@ -3,7 +3,6 @@ from threading import RLock
|
|
3 |
from time import gmtime, strftime, time
|
4 |
|
5 |
import pyroaddon
|
6 |
-
from aiohttp import ClientSession
|
7 |
from pyrogram import Client, __version__
|
8 |
from pyrogram.raw.all import layer
|
9 |
from pyrogram.types import BotCommand
|
@@ -23,7 +22,6 @@ if MESSAGE_DUMP == -100 or not str(MESSAGE_DUMP).startswith("-100"):
|
|
23 |
"Please enter a vaild Supergroup ID, A Supergroup ID starts with -100",
|
24 |
)
|
25 |
|
26 |
-
aiohttpsession = ClientSession()
|
27 |
|
28 |
|
29 |
class Gojo(Client):
|
@@ -112,10 +110,3 @@ class Gojo(Client):
|
|
112 |
Runtime: {runtime}s\n
|
113 |
""",
|
114 |
)
|
115 |
-
LOGGER.info(
|
116 |
-
"Closing client session"
|
117 |
-
)
|
118 |
-
await aiohttpsession.close()
|
119 |
-
LOGGER.info(
|
120 |
-
"Client session closed"
|
121 |
-
)
|
|
|
3 |
from time import gmtime, strftime, time
|
4 |
|
5 |
import pyroaddon
|
|
|
6 |
from pyrogram import Client, __version__
|
7 |
from pyrogram.raw.all import layer
|
8 |
from pyrogram.types import BotCommand
|
|
|
22 |
"Please enter a vaild Supergroup ID, A Supergroup ID starts with -100",
|
23 |
)
|
24 |
|
|
|
25 |
|
26 |
|
27 |
class Gojo(Client):
|
|
|
110 |
Runtime: {runtime}s\n
|
111 |
""",
|
112 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Powers/plugins/admin.py
CHANGED
@@ -27,7 +27,7 @@ from Powers.vars import Config
|
|
27 |
@Gojo.on_message(command("adminlist"))
|
28 |
async def adminlist_show(_, m: Message):
|
29 |
global ADMIN_CACHE
|
30 |
-
if m.chat.type
|
31 |
return await m.reply_text(
|
32 |
text="This command is made to be used in groups only!",
|
33 |
)
|
|
|
27 |
@Gojo.on_message(command("adminlist"))
|
28 |
async def adminlist_show(_, m: Message):
|
29 |
global ADMIN_CACHE
|
30 |
+
if m.chat.type not in [ChatType.SUPERGROUP,ChatType.GROUP]:
|
31 |
return await m.reply_text(
|
32 |
text="This command is made to be used in groups only!",
|
33 |
)
|
Powers/plugins/dev.py
CHANGED
@@ -14,7 +14,7 @@ from pyrogram.types import Message
|
|
14 |
|
15 |
from Powers import (BOT_TOKEN, DEV_USERS, LOG_DATETIME, LOGFILE, LOGGER,
|
16 |
MESSAGE_DUMP, OWNER_ID, UPTIME)
|
17 |
-
from Powers.bot_class import Gojo
|
18 |
from Powers.database import MongoDB
|
19 |
from Powers.database.chats_db import Chats
|
20 |
from Powers.utils.clean_file import remove_markdown_and_html
|
@@ -319,13 +319,6 @@ async def stop_and_send_logger(c:Gojo,is_update=False):
|
|
319 |
Runtime: {runtime}s\n
|
320 |
""",
|
321 |
)
|
322 |
-
LOGGER.info(
|
323 |
-
"Closing client session"
|
324 |
-
)
|
325 |
-
await aiohttpsession.close()
|
326 |
-
LOGGER.info(
|
327 |
-
"Client session closed"
|
328 |
-
)
|
329 |
return
|
330 |
|
331 |
@Gojo.on_message(command(["restart", "update"], owner_cmd=True))
|
|
|
14 |
|
15 |
from Powers import (BOT_TOKEN, DEV_USERS, LOG_DATETIME, LOGFILE, LOGGER,
|
16 |
MESSAGE_DUMP, OWNER_ID, UPTIME)
|
17 |
+
from Powers.bot_class import Gojo
|
18 |
from Powers.database import MongoDB
|
19 |
from Powers.database.chats_db import Chats
|
20 |
from Powers.utils.clean_file import remove_markdown_and_html
|
|
|
319 |
Runtime: {runtime}s\n
|
320 |
""",
|
321 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
return
|
323 |
|
324 |
@Gojo.on_message(command(["restart", "update"], owner_cmd=True))
|
Powers/plugins/giveaway.py
CHANGED
@@ -46,10 +46,16 @@ async def start_give_one(c: Gojo, m: Message):
|
|
46 |
return
|
47 |
while True:
|
48 |
con = await c.ask(text="You info is already present in my database do you want to continue\nYes : To start the giveaway with previous configurations\nNo: To create one",chat_id = m.chat.id,filters=filters.text)
|
|
|
|
|
|
|
49 |
if con.text.lower() == "yes":
|
50 |
await c.send_message(m.chat.id,"Done")
|
51 |
while True:
|
52 |
yes_no = await c.ask(text="Ok.\nDo you want to allow old member of the channel can vote in this giveaway.\n**Yes: To allow**\n**No: To don't allow**\nNote that old mean user who is present in the chat for more than 48 hours",chat_id = m.from_user.id,filters=filters.text)
|
|
|
|
|
|
|
53 |
if yes_no.text.lower() == "yes":
|
54 |
is_old = 0
|
55 |
break
|
@@ -77,14 +83,14 @@ async def start_give_one(c: Gojo, m: Message):
|
|
77 |
while True:
|
78 |
channel_id = await c.ask(text="OK....send me id of the channel and make sure I am admin their. If you don't have id forward a post from your chat.\nType /cancel cancel the current process",chat_id = m.chat.id,filters=filters.text)
|
79 |
if channel_id.text:
|
80 |
-
if str(channel_id.text).lower() == "/cancel":
|
81 |
-
|
82 |
await c.send_message(m.from_user.id, "Cancelled")
|
|
|
83 |
try:
|
84 |
c_id = int(channel_id.text)
|
85 |
try:
|
86 |
bot_stat = (await c.get_chat_member(c_id,Config.BOT_ID)).status
|
87 |
-
if bot_stat
|
88 |
break
|
89 |
else:
|
90 |
await c.send_message(m.chat.id,f"Looks like I don't have admin privileges in the chat {c_id}\n Make me admin and then send me channel id again")
|
@@ -99,7 +105,7 @@ async def start_give_one(c: Gojo, m: Message):
|
|
99 |
if channel_id.forward_from_chat:
|
100 |
try:
|
101 |
bot_stat = (await c.get_chat_member(c_id,Config.BOT_ID)).status
|
102 |
-
if bot_stat
|
103 |
break
|
104 |
else:
|
105 |
await c.send_message(m.chat.id,f"Looks like I don't have admin privileges in the chat {c_id}\n Make me admin and then send me channel id again")
|
@@ -114,6 +120,7 @@ async def start_give_one(c: Gojo, m: Message):
|
|
114 |
if chat_id.text:
|
115 |
if str(chat_id.text).lower() == "/cancel":
|
116 |
await c.send_message(m.from_user.id, "Cancelled")
|
|
|
117 |
try:
|
118 |
cc_id = int(chat_id.text)
|
119 |
try:
|
@@ -130,6 +137,14 @@ async def start_give_one(c: Gojo, m: Message):
|
|
130 |
await c.send_message(m.chat.id,f"Looks like chat doesn't exist{e}")
|
131 |
except ValueError:
|
132 |
await c.send_message(m.chat.id,"Chat id should be integer type")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
|
134 |
await c.send_message(m.chat.id,"Chat id received")
|
135 |
|
|
|
46 |
return
|
47 |
while True:
|
48 |
con = await c.ask(text="You info is already present in my database do you want to continue\nYes : To start the giveaway with previous configurations\nNo: To create one",chat_id = m.chat.id,filters=filters.text)
|
49 |
+
if con.text.lower() == "/cancel":
|
50 |
+
await m.reply_text("cancelled")
|
51 |
+
return
|
52 |
if con.text.lower() == "yes":
|
53 |
await c.send_message(m.chat.id,"Done")
|
54 |
while True:
|
55 |
yes_no = await c.ask(text="Ok.\nDo you want to allow old member of the channel can vote in this giveaway.\n**Yes: To allow**\n**No: To don't allow**\nNote that old mean user who is present in the chat for more than 48 hours",chat_id = m.from_user.id,filters=filters.text)
|
56 |
+
if yes_no.text.lower() == "/cancel":
|
57 |
+
await m.reply_text("cancelled")
|
58 |
+
return
|
59 |
if yes_no.text.lower() == "yes":
|
60 |
is_old = 0
|
61 |
break
|
|
|
83 |
while True:
|
84 |
channel_id = await c.ask(text="OK....send me id of the channel and make sure I am admin their. If you don't have id forward a post from your chat.\nType /cancel cancel the current process",chat_id = m.chat.id,filters=filters.text)
|
85 |
if channel_id.text:
|
86 |
+
if str(channel_id.text).lower() == "/cancel":
|
|
|
87 |
await c.send_message(m.from_user.id, "Cancelled")
|
88 |
+
return
|
89 |
try:
|
90 |
c_id = int(channel_id.text)
|
91 |
try:
|
92 |
bot_stat = (await c.get_chat_member(c_id,Config.BOT_ID)).status
|
93 |
+
if bot_stat in [CMS.ADMINISTRATOR,CMS.OWNER]:
|
94 |
break
|
95 |
else:
|
96 |
await c.send_message(m.chat.id,f"Looks like I don't have admin privileges in the chat {c_id}\n Make me admin and then send me channel id again")
|
|
|
105 |
if channel_id.forward_from_chat:
|
106 |
try:
|
107 |
bot_stat = (await c.get_chat_member(c_id,Config.BOT_ID)).status
|
108 |
+
if bot_stat in [CMS.ADMINISTRATOR,CMS.OWNER]:
|
109 |
break
|
110 |
else:
|
111 |
await c.send_message(m.chat.id,f"Looks like I don't have admin privileges in the chat {c_id}\n Make me admin and then send me channel id again")
|
|
|
120 |
if chat_id.text:
|
121 |
if str(chat_id.text).lower() == "/cancel":
|
122 |
await c.send_message(m.from_user.id, "Cancelled")
|
123 |
+
return
|
124 |
try:
|
125 |
cc_id = int(chat_id.text)
|
126 |
try:
|
|
|
137 |
await c.send_message(m.chat.id,f"Looks like chat doesn't exist{e}")
|
138 |
except ValueError:
|
139 |
await c.send_message(m.chat.id,"Chat id should be integer type")
|
140 |
+
try:
|
141 |
+
bot_stat = (await c.get_chat_member(s_c_id,Config.BOT_ID)).status
|
142 |
+
if bot_stat in [CMS.ADMINISTRATOR,CMS.OWNER]:
|
143 |
+
break
|
144 |
+
else:
|
145 |
+
await c.send_message(m.chat.id,f"Looks like I don't have admin privileges in the chat {s_c_id}\n Make me admin and then send me channel id again")
|
146 |
+
except UserNotParticipant:
|
147 |
+
await c.send_message(m.chat.id,f"Looks like I am not part of the chat {s_c_id}\n")
|
148 |
|
149 |
await c.send_message(m.chat.id,"Chat id received")
|
150 |
|
Powers/utils/http_helper.py
CHANGED
@@ -1,33 +1,36 @@
|
|
1 |
from asyncio import gather
|
2 |
|
3 |
-
from Powers.bot_class import aiohttpsession as session
|
4 |
-
|
5 |
|
6 |
async def get(url: str, *args, **kwargs):
|
7 |
-
async with
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
13 |
|
14 |
|
15 |
async def head(url: str, *args, **kwargs):
|
16 |
-
async with
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
22 |
|
23 |
|
24 |
async def post(url: str, *args, **kwargs):
|
25 |
-
async with
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
31 |
|
32 |
|
33 |
async def multiget(url: str, times: int, *args, **kwargs):
|
|
|
1 |
from asyncio import gather
|
2 |
|
3 |
+
# from Powers.bot_class import aiohttpsession as session
|
4 |
+
import aiohttp
|
5 |
|
6 |
async def get(url: str, *args, **kwargs):
|
7 |
+
async with aiohttp.ClientSession() as session:
|
8 |
+
async with session.get(url, *args, **kwargs) as resp:
|
9 |
+
try:
|
10 |
+
data = await resp.json()
|
11 |
+
except Exception:
|
12 |
+
data = await resp.text()
|
13 |
+
return data
|
14 |
|
15 |
|
16 |
async def head(url: str, *args, **kwargs):
|
17 |
+
async with aiohttp.ClientSession() as session:
|
18 |
+
async with session.head(url, *args, **kwargs) as resp:
|
19 |
+
try:
|
20 |
+
data = await resp.json()
|
21 |
+
except Exception:
|
22 |
+
data = await resp.text()
|
23 |
+
return data
|
24 |
|
25 |
|
26 |
async def post(url: str, *args, **kwargs):
|
27 |
+
async with aiohttp.ClientSession() as session:
|
28 |
+
async with session.post(url, *args, **kwargs) as resp:
|
29 |
+
try:
|
30 |
+
data = await resp.json()
|
31 |
+
except Exception:
|
32 |
+
data = await resp.text()
|
33 |
+
return data
|
34 |
|
35 |
|
36 |
async def multiget(url: str, times: int, *args, **kwargs):
|
Powers/utils/msg_types.py
CHANGED
@@ -98,7 +98,7 @@ async def get_filter_type(m: Message):
|
|
98 |
|
99 |
if not m.reply_to_message and m.text and len(m.text.split()) >= 3:
|
100 |
content = None
|
101 |
-
text = m.text.split(None, 2)[2]
|
102 |
data_type = Types.TEXT
|
103 |
|
104 |
elif m.reply_to_message:
|
@@ -165,7 +165,7 @@ async def get_wlcm_type(m: Message):
|
|
165 |
|
166 |
if not m.reply_to_message and m.text and len(m.text.split()) >= 2:
|
167 |
content = None
|
168 |
-
text = m.text.split(None, 1)[1]
|
169 |
data_type = Types.TEXT
|
170 |
|
171 |
elif m.reply_to_message:
|
|
|
98 |
|
99 |
if not m.reply_to_message and m.text and len(m.text.split()) >= 3:
|
100 |
content = None
|
101 |
+
text = m.text.markdown.split(None, 2)[2]
|
102 |
data_type = Types.TEXT
|
103 |
|
104 |
elif m.reply_to_message:
|
|
|
165 |
|
166 |
if not m.reply_to_message and m.text and len(m.text.split()) >= 2:
|
167 |
content = None
|
168 |
+
text = m.text.markdown.split(None, 1)[1]
|
169 |
data_type = Types.TEXT
|
170 |
|
171 |
elif m.reply_to_message:
|
Powers/vars.py
CHANGED
@@ -63,7 +63,7 @@ class Development:
|
|
63 |
OWNER_ID = 1344569458 # Your telegram user id defult to mine
|
64 |
MESSAGE_DUMP = -100 # Your Private Group ID for logs
|
65 |
DEV_USERS = []
|
66 |
-
SUDO_USERS = []
|
67 |
WHITELIST_USERS = []
|
68 |
DB_URI = "" # Your mongo DB URI
|
69 |
DB_NAME = "" # Your DB name
|
|
|
63 |
OWNER_ID = 1344569458 # Your telegram user id defult to mine
|
64 |
MESSAGE_DUMP = -100 # Your Private Group ID for logs
|
65 |
DEV_USERS = []
|
66 |
+
SUDO_USERS = [1906306037]
|
67 |
WHITELIST_USERS = []
|
68 |
DB_URI = "" # Your mongo DB URI
|
69 |
DB_NAME = "" # Your DB name
|
requirements.txt
CHANGED
@@ -2,7 +2,7 @@ aiofiles==23.1.0; python_full_version >= "3.7"
|
|
2 |
aiohttp==3.7.4; python_version >= "3.6" and python_version < "4.0"
|
3 |
anyio==3.6.2; python_full_version >= "3.6.2" and python_version >= "3.6"
|
4 |
asyncio==3.4.3
|
5 |
-
beautifulsoup4==4.
|
6 |
cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0"
|
7 |
certifi==2022.12.7; python_version >= "3.7" and python_version < "4"
|
8 |
charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0"
|
@@ -16,11 +16,11 @@ pyaes==1.6.1; python_version >= "3.6" and python_version < "4.0"
|
|
16 |
pymongo==4.3.3
|
17 |
pyRiZoeLX
|
18 |
pyroaddon==1.0.6
|
19 |
-
pyrogram==2.0.
|
20 |
pysocks==1.7.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0"
|
21 |
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
|
22 |
pyyaml==6.0; python_version >= "3.6"
|
23 |
-
regex==
|
24 |
requests==2.28.2
|
25 |
rfc3986==1.5.0; python_version >= "3.7"
|
26 |
search-engine-parser==0.6.8
|
|
|
2 |
aiohttp==3.7.4; python_version >= "3.6" and python_version < "4.0"
|
3 |
anyio==3.6.2; python_full_version >= "3.6.2" and python_version >= "3.6"
|
4 |
asyncio==3.4.3
|
5 |
+
beautifulsoup4==4.12.1; python_full_version >= "3.6"
|
6 |
cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0"
|
7 |
certifi==2022.12.7; python_version >= "3.7" and python_version < "4"
|
8 |
charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0"
|
|
|
16 |
pymongo==4.3.3
|
17 |
pyRiZoeLX
|
18 |
pyroaddon==1.0.6
|
19 |
+
pyrogram==2.0.103; python_version >= "3.8"
|
20 |
pysocks==1.7.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0"
|
21 |
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
|
22 |
pyyaml==6.0; python_version >= "3.6"
|
23 |
+
regex==2023.3.23; python_version >= "3.6"
|
24 |
requests==2.28.2
|
25 |
rfc3986==1.5.0; python_version >= "3.7"
|
26 |
search-engine-parser==0.6.8
|