Fix discord channel name and add verification
This commit is contained in:
parent
cc40e9dcf3
commit
d645fecae0
7 changed files with 23 additions and 4 deletions
|
|
@ -95,6 +95,10 @@ class Api:
|
||||||
default_auto_archive_duration: int
|
default_auto_archive_duration: int
|
||||||
default_thread_rate_limit_per_user: int
|
default_thread_rate_limit_per_user: int
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def delete_channel(channel_id: int) -> tuple[ApiAction, str]:
|
||||||
|
return ApiAction.DELETE, f'/channels/{channel_id}'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def list_guilds(guild_id: int) -> tuple[ApiAction, str]:
|
def list_guilds(guild_id: int) -> tuple[ApiAction, str]:
|
||||||
return ApiAction.GET, f'/guilds/{guild_id}/channels'
|
return ApiAction.GET, f'/guilds/{guild_id}/channels'
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import http.client
|
||||||
import logging
|
import logging
|
||||||
import operator
|
import operator
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import re
|
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
@ -377,6 +376,10 @@ class Bot:
|
||||||
allow=Permissions.VIEW_CHANNEL | Permissions.SEND_MESSAGES,
|
allow=Permissions.VIEW_CHANNEL | Permissions.SEND_MESSAGES,
|
||||||
deny=Permissions.NONE)]},
|
deny=Permissions.NONE)]},
|
||||||
request_timeout=self.config.request_timeout)
|
request_timeout=self.config.request_timeout)
|
||||||
|
if sub_channel != subscription.name:
|
||||||
|
self.logger.error('Cannot create channel "%s" : mismatch name -> %s',
|
||||||
|
subscription.name, sub_channel.name)
|
||||||
|
self.discord_manager.delete_text_channel(sub_channel.id, request_timeout=self.config.request_timeout)
|
||||||
return sub_channel
|
return sub_channel
|
||||||
|
|
||||||
def _refresh_subscription(self, connection: http.client.HTTPSConnection, subscription: SubscriptionInfo):
|
def _refresh_subscription(self, connection: http.client.HTTPSConnection, subscription: SubscriptionInfo):
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,11 @@ class DiscordManager:
|
||||||
raise RuntimeError(f'Error creating channel with params (no info): {params}')
|
raise RuntimeError(f'Error creating channel with params (no info): {params}')
|
||||||
return TextChannel.from_dict(channel_info)
|
return TextChannel.from_dict(channel_info)
|
||||||
|
|
||||||
|
def delete_text_channel(self, channel_id: int, request_timeout: float):
|
||||||
|
_, _ = self._send_request(
|
||||||
|
*Api.Guild.delete_channel(channel_id=channel_id), request_timeout=request_timeout,
|
||||||
|
expected_code=204)
|
||||||
|
|
||||||
def create_message(self, channel: TextChannel, params: Api.Message.CreateParams, request_timeout: float,
|
def create_message(self, channel: TextChannel, params: Api.Message.CreateParams, request_timeout: float,
|
||||||
upload_files: list[tuple[str, FileMime, bytes]] | None = None) -> Message:
|
upload_files: list[tuple[str, FileMime, bytes]] | None = None) -> Message:
|
||||||
if 'content' in params and len(params['content']) >= self.MAX_MESSAGE_LENGTH:
|
if 'content' in params and len(params['content']) >= self.MAX_MESSAGE_LENGTH:
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import re
|
||||||
from typing import NewType
|
from typing import NewType
|
||||||
|
|
||||||
from breadtube_bot.unidecode import unidecode
|
from breadtube_bot.unidecode import unidecode
|
||||||
|
|
@ -68,7 +69,10 @@ class SubscriptionInfo:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def discord_compatible_name(text: str) -> SubscriptionName:
|
def discord_compatible_name(text: str) -> SubscriptionName:
|
||||||
assert text, 'Channel name cannot be empty'
|
assert text, 'Channel name cannot be empty'
|
||||||
return SubscriptionName(unidecode(text[:100].replace(' ', '-')))
|
name = unidecode(text[:100].replace(' ', '-'))
|
||||||
|
name = re.sub(r'-+', '-', name)
|
||||||
|
name = re.sub(r'-+$', '', name)
|
||||||
|
return SubscriptionName(name)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_dict(info: dict) -> SubscriptionInfo:
|
def from_dict(info: dict) -> SubscriptionInfo:
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ max-nested-blocks=8
|
||||||
max-public-methods=16
|
max-public-methods=16
|
||||||
max-returns=8
|
max-returns=8
|
||||||
max-statements=96
|
max-statements=96
|
||||||
|
max-statements-in-try=64
|
||||||
|
|
||||||
[tool.ruff.lint.mccabe]
|
[tool.ruff.lint.mccabe]
|
||||||
max-complexity = 34
|
max-complexity = 34
|
||||||
|
|
|
||||||
BIN
tests/data/subscriptions.csv
(Stored with Git LFS)
BIN
tests/data/subscriptions.csv
(Stored with Git LFS)
Binary file not shown.
|
|
|
@ -7,3 +7,5 @@ def test_helper():
|
||||||
subscriptions = SubscriptionHelper.read_text(Path('tests/data/subscriptions.csv').read_bytes())
|
subscriptions = SubscriptionHelper.read_text(Path('tests/data/subscriptions.csv').read_bytes())
|
||||||
assert subscriptions['UUlDye0T4xTEq46sA5evq9fA'].name == 'a-gauche'
|
assert subscriptions['UUlDye0T4xTEq46sA5evq9fA'].name == 'a-gauche'
|
||||||
assert subscriptions['UUFrDDP81MX_QfOHrRZOgD4g'].name == 'l214'
|
assert subscriptions['UUFrDDP81MX_QfOHrRZOgD4g'].name == 'l214'
|
||||||
|
assert subscriptions['UUe2Lt08V5TVudUa86OzRm3w'].name == 'irascible'
|
||||||
|
assert subscriptions['UUHXyS9njDTc-HbnfRr1k6uA'].name == 'praxis-par-francois-boulo'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue