Skip to content

Commit 39cc433

Browse files
committed
feat: move Vote class
1 parent fffb66f commit 39cc433

6 files changed

Lines changed: 50 additions & 50 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def get_server_count() -> int:
110110

111111
@client.autopost_success
112112
def success(server_count: int) -> None:
113-
print(f'Successfully posted {server_count} servers to the API!')
113+
print(f'Successfully posted {server_count} servers to Top.gg!')
114114

115115
@client.autopost_error
116116
def error(error: topgg.Error) -> None:

docs/data.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@ Data reference
44
.. autoclass:: topgg.models.Bot()
55
:members:
66

7+
.. autoclass:: topgg.models.Vote()
8+
:members:
9+
710
.. autoclass:: topgg.models.Voter()
811
:members:

docs/webhooks.rst

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,5 @@ Webhooks reference
44
.. autoclass:: topgg.webhooks.Webhooks
55
:members:
66

7-
.. autoclass:: topgg.webhooks.Vote()
8-
:members:
9-
107
.. autodata:: topgg.webhooks.OnVoteCallback
118
.. autodata:: topgg.webhooks.OnVoteDecorator

topgg/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
"""
2525

2626
from .errors import Error, RequestError, Ratelimited
27-
from .models import Bot, SortBy, Voter
28-
from .webhooks import Vote, Webhooks
27+
from .models import Bot, SortBy, Vote, Voter
28+
from .webhooks import Webhooks
2929
from .widget import WidgetType
3030
from .version import VERSION
3131
from .client import Client

topgg/models.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
from datetime import datetime, timezone
2727
from typing import Optional, TypeVar
28+
from urllib import parse
2829
from enum import Enum
2930

3031

@@ -40,6 +41,47 @@ def timestamp_from_id(id: int) -> datetime:
4041
return datetime.fromtimestamp(((id >> 22) + 1420070400000) // 1000, tz=timezone.utc)
4142

4243

44+
class Vote:
45+
"""A dispatched Top.gg vote event."""
46+
47+
__slots__ = ('receiver_id', 'voter_id', 'is_test', 'is_weekend', 'query')
48+
49+
receiver_id: int
50+
"""The ID of the Discord bot/server that received a vote."""
51+
52+
voter_id: int
53+
"""The ID of the Top.gg user who voted."""
54+
55+
is_test: bool
56+
"""Whether this vote is just a test done from the page settings."""
57+
58+
is_weekend: bool
59+
"""Whether the weekend multiplier is active, where a single vote counts as two."""
60+
61+
query: dict[str, str]
62+
"""Query strings found on the vote page."""
63+
64+
def __init__(self, json: dict):
65+
guild = json.get('guild')
66+
67+
self.receiver_id = int(json.get('bot', guild))
68+
self.voter_id = int(json['user'])
69+
self.is_test = json['type'] == 'test'
70+
self.is_weekend = bool(json.get('isWeekend'))
71+
72+
if query := json.get('query'):
73+
self.query = {
74+
k: v[0] for k, v in parse.parse_qs(parse.urlsplit(query).query).items()
75+
}
76+
else:
77+
self.query = {}
78+
79+
def __repr__(self) -> str:
80+
return (
81+
f'<{__class__.__name__} receiver_id={self.receiver_id} voter_id={self.voter_id}>'
82+
)
83+
84+
4385
class Voter:
4486
"""A Top.gg voter."""
4587

topgg/webhooks.py

Lines changed: 2 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -28,53 +28,11 @@
2828
from typing import Any, Optional, Union
2929
from json import JSONDecodeError
3030
from inspect import isawaitable
31-
from urllib import parse
3231

33-
34-
RawCallback = Callable[[web.Request], Awaitable[web.StreamResponse]]
35-
36-
37-
class Vote:
38-
"""A dispatched Top.gg vote event."""
39-
40-
__slots__ = ('receiver_id', 'voter_id', 'is_test', 'is_weekend', 'query')
41-
42-
receiver_id: int
43-
"""The ID of the Discord bot/server that received a vote."""
44-
45-
voter_id: int
46-
"""The ID of the Top.gg user who voted."""
47-
48-
is_test: bool
49-
"""Whether this vote is just a test done from the page settings."""
50-
51-
is_weekend: bool
52-
"""Whether the weekend multiplier is active, where a single vote counts as two."""
53-
54-
query: dict[str, str]
55-
"""Query strings found on the vote page."""
56-
57-
def __init__(self, json: dict):
58-
guild = json.get('guild')
59-
60-
self.receiver_id = int(json.get('bot', guild))
61-
self.voter_id = int(json['user'])
62-
self.is_test = json['type'] == 'test'
63-
self.is_weekend = bool(json.get('isWeekend'))
64-
65-
if query := json.get('query'):
66-
self.query = {
67-
k: v[0] for k, v in parse.parse_qs(parse.urlsplit(query).query).items()
68-
}
69-
else:
70-
self.query = {}
71-
72-
def __repr__(self) -> str:
73-
return (
74-
f'<{__class__.__name__} receiver_id={self.receiver_id} voter_id={self.voter_id}>'
75-
)
32+
from .models import Vote
7633

7734

35+
RawCallback = Callable[[web.Request], Awaitable[web.StreamResponse]]
7836
OnVoteCallback = Callable[[Vote], Any]
7937
OnVoteDecorator = Callable[[OnVoteCallback], RawCallback]
8038

0 commit comments

Comments
 (0)