Skip to content

Commit 56f099d

Browse files
committed
Update python-publish.yml
2.10.3 Unreleased unused presence Fixed sql and remaining_before_removal Fix selenium
1 parent 2d0f3cd commit 56f099d

File tree

11 files changed

+67
-38
lines changed

11 files changed

+67
-38
lines changed

.github/workflows/python-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: (todo) Nuitka build and publish to PyPi
1+
name: Publish to PyPi
22

33
on:
44
workflow_dispatch:

Patches/3_gateway.patch

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ index e3e7d1b..e847fc6 100644
6868
+ "browser_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
6969
+ "browser_version":"109.0.0.0",
7070
+ },
71-
+ "presence": {"status":"online","since":0,"activities":[],"afk": False},
7271
+ "compress": True
7372
+ }
7473
+ }

docs/source/changelog.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ Glossary
3737
Releases
3838
---------------------
3939

40+
|UNRELEASED| v2.10.3
41+
======================
42+
- Fixed Chrome driver not working with newer Chrome versions (115+).
43+
- Fetching invite links better bypass.
44+
- Remove invalid presence
45+
- Fixed ``remaining_before_removal`` properties
46+
- Fixed SQL queries not working on direct messages.
47+
48+
4049
v2.10.2
4150
=======================
4251
- Fixed *Unclosed client session* warning when removing an user account.

requirements/web.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
selenium==4.11.2
22
undetected-chromedriver==3.5.2
3+
webdriver-manager==4.0.0

src/_discord/gateway.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,6 @@ async def identify(self):
433433
"browser_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
434434
"browser_version":"109.0.0.0",
435435
},
436-
"presence": {"status":"online","since":0,"activities":[],"afk": False},
437436
"compress": True
438437
}
439438
}

src/daf/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
from .remote import *
1616

1717

18-
VERSION = "2.10.2"
18+
VERSION = "2.10.3"

src/daf/logging/sql/tables.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -293,26 +293,26 @@ class MessageLOG(ORMBase):
293293
success_rate = column_property(
294294
case(
295295
(
296-
select(MessageTYPE.name).where(MessageTYPE.id == message_type_id) != "DirectMESSAGE",
296+
select(MessageTYPE.name).where(MessageTYPE.id == message_type_id).scalar_subquery() != "DirectMESSAGE",
297297
100 * select(func.count()).where(MessageChannelLOG.reason.is_(None), MessageChannelLOG.log_id == id)
298298
.select_from(MessageChannelLOG)
299299
.scalar_subquery() /
300300
select(func.count()).where(MessageChannelLOG.log_id == id).select_from(MessageChannelLOG)
301-
.scalar_subquery(),
301+
.scalar_subquery()
302302
),
303303
else_=case((dm_reason.is_(None), 100), else_=0)
304304
)
305305
)
306306

307307
def __init__(
308-
self,
309-
sent_data: DataHISTORY = None,
310-
message_type: MessageTYPE = None,
311-
message_mode: MessageMODE = None,
312-
dm_reason: str = None,
313-
guild: GuildUSER = None,
314-
author: GuildUSER = None,
315-
channels: List["MessageChannelLOG"] = None
308+
self,
309+
sent_data: DataHISTORY = None,
310+
message_type: MessageTYPE = None,
311+
message_mode: MessageMODE = None,
312+
dm_reason: str = None,
313+
guild: GuildUSER = None,
314+
author: GuildUSER = None,
315+
channels: List["MessageChannelLOG"] = None
316316
):
317317
self.sent_data = sent_data
318318
self.message_type = message_type

src/daf/message/base.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,11 @@ def remaining_before_removal(self) -> Any:
223223
224224
.. versionadded:: v2.10
225225
"""
226-
raise NotImplementedError
226+
r = self.remove_after
227+
if isinstance(r, timedelta):
228+
r = r - (datetime.now() - self._created_at)
229+
230+
return r
227231

228232
@property
229233
def created_at(self) -> datetime:
@@ -624,9 +628,20 @@ def __init__(
624628
self.remove_after_by_channel = {}
625629

626630
@property
627-
def remaining_before_removal(self) -> Union[Dict[int, int], timedelta, datetime, int]:
628-
# Return the counts dictionary or the original remove_after parameter if dictionary is empty
629-
return self.remove_after_by_channel or self.remove_after
631+
def remaining_before_removal(self) -> Union[Dict[ChannelType, int], timedelta, datetime, int]:
632+
"""
633+
Returns
634+
------------
635+
int
636+
(Only if message not yet sent) Number of successful sends to each channel before removal.
637+
Dict[ChannelType, int]
638+
Dictionary mapping channel objects to remaining number of sends to that channel.
639+
timedelta
640+
Remaining ammount of time before removal.
641+
datetime
642+
Timestamp of removal.
643+
"""
644+
return {self.parent.parent.client.get_channel(k): v for k, v in self.remove_after_by_channel.items()} or super().remaining_before_removal
630645

631646
def _check_state(self) -> bool:
632647
return (

src/daf/message/text_based.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,8 @@ def __init__(self,
573573

574574
@property
575575
def remaining_before_removal(self) -> Union[timedelta, datetime, int]:
576-
return self._remove_after
576+
r = self._remove_after
577+
return r if isinstance(r, int) else super().remaining_before_removal
577578

578579
def _check_state(self) -> bool:
579580
return (

src/daf/web.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class GLOBALS:
2828

2929
# ----------------- OPTIONAL ----------------- #
3030
try:
31+
from webdriver_manager.chrome import ChromeDriverManager
3132
from undetected_chromedriver import Chrome
3233
from selenium.webdriver.chrome.options import Options
3334
from selenium.webdriver.remote.webelement import WebElement
@@ -168,7 +169,7 @@ async def initialize(self) -> None:
168169
proxy = f"{proxy[0]}://{proxy[1]}"
169170
opts.add_argument(f"--proxy-server={proxy}")
170171

171-
driver = Chrome(options=opts)
172+
driver = Chrome(options=opts, driver_executable_path=ChromeDriverManager().install())
172173
driver.maximize_window()
173174
self.driver = driver
174175

@@ -306,31 +307,31 @@ async def fetch_invite_link(self, url: str):
306307
trace(f"Fetching invite link from {url}", TraceLEVELS.DEBUG)
307308
driver = self.driver
308309
main_window_handle = driver.current_window_handle
309-
# Open a new tab with javascript to bypass detection
310-
driver.execute_script(f"window.open('{url}', '_blank');") # Open a new tab
311-
await asyncio.sleep(3)
312-
new_handle = driver.window_handles[-1]
310+
311+
driver.execute_script(f"window.open('{url}', '_blank');") # Try to bypass from start
312+
await asyncio.sleep(5)
313+
invite_handle = driver.window_handles[-1]
314+
driver.switch_to.window(invite_handle)
313315
try:
314316
for i in range(WD_FETCH_INVITE_CLOUDFLARE_TRIES):
315317
with suppress(NoSuchElementException):
316-
driver.switch_to.window(new_handle)
317318
trace("Finding 'challenge-running' cloudflare ID", TraceLEVELS.DEBUG)
318-
driver.find_element(By.ID, "challenge-running")
319-
driver.switch_to.window(main_window_handle)
320-
await asyncio.sleep(WD_FETCH_INVITE_CLOUDFLARE_DELAY * (i + 1))
321-
continue
322-
323-
await asyncio.sleep(2)
324-
driver.switch_to.window(new_handle)
325-
trace("No 'challenge-running' found. Checks suceeded", TraceLEVELS.DEBUG)
319+
if "top.gg" in driver.current_url:
320+
driver.find_element(By.ID, "challenge-running")
321+
# Open a new tab with javascript to bypass detection
322+
trace("Found 'challenge-running' tag", TraceLEVELS.DEBUG)
323+
driver.execute_script("window.open('https://top.gg', '_blank');")
324+
await asyncio.sleep(WD_FETCH_INVITE_CLOUDFLARE_DELAY * (i + 1))
325+
driver.switch_to.window(driver.window_handles[-1])
326+
driver.close()
327+
driver.switch_to.window(invite_handle)
328+
await self.async_execute(driver.refresh)
329+
330+
trace("Great! 'challenge-running' not found", TraceLEVELS.DEBUG)
326331
break
327332
else:
328-
driver.switch_to.window(new_handle)
329-
driver.close()
330-
driver.switch_to.window(main_window_handle)
331-
raise RuntimeError("Could not complete cloudflare checks")
333+
raise RuntimeError("Could not bypass 'challenge-running'")
332334

333-
# await self.async_execute(driver.get, url)
334335
await self.async_execute(
335336
WebDriverWait(driver, WD_TIMEOUT_LONG).until,
336337
url_contains("discord.com")
@@ -646,6 +647,7 @@ async def join_guild(self, invite: str) -> None:
646647
"//span[contains(text() , 'Unable to accept')]"
647648
)
648649
# Element found -> join error
650+
ActionChains(driver).send_keys(Keys.ESCAPE).perform()
649651
raise RuntimeError(f"The user appears to be banned from the guild w/ invite {invite}")
650652

651653
await self.random_sleep(2, 3)

0 commit comments

Comments
 (0)