Discord does not render GFM pipe tables — raw pipe characters display as garbage text. format_message now rewrites tables into bold-heading + bullet groups using the shared helpers. Fixes #21168 Co-authored-by: Yashiel Sookdeo <yashiel@skyner.co.za>
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""Discord format_message: tables converted to bullet groups."""
|
|
|
|
import types
|
|
import sys
|
|
|
|
|
|
def _make_discord_adapter():
|
|
"""Construct a DiscordAdapter with discord.py stubbed out."""
|
|
fake_discord = types.ModuleType("discord")
|
|
fake_discord.Intents = type("Intents", (), {"default": classmethod(lambda cls: cls())})
|
|
fake_discord.Message = object
|
|
fake_ext = types.ModuleType("discord.ext")
|
|
fake_commands = types.ModuleType("discord.ext.commands")
|
|
fake_ext.commands = fake_commands
|
|
fake_discord.ext = fake_ext
|
|
sys.modules.setdefault("discord", fake_discord)
|
|
sys.modules.setdefault("discord.ext", fake_ext)
|
|
sys.modules.setdefault("discord.ext.commands", fake_commands)
|
|
|
|
from plugins.platforms.discord.adapter import DiscordAdapter
|
|
adapter = object.__new__(DiscordAdapter)
|
|
return adapter
|
|
|
|
|
|
class TestDiscordFormatMessage:
|
|
|
|
def test_table_converted_to_bullets(self):
|
|
adapter = _make_discord_adapter()
|
|
text = (
|
|
"Results:\n\n"
|
|
"| Name | Score |\n"
|
|
"|------|-------|\n"
|
|
"| Alice | 95 |\n"
|
|
"| Bob | 80 |\n"
|
|
"\nDone."
|
|
)
|
|
out = adapter.format_message(text)
|
|
assert "**Alice**" in out
|
|
assert "• Score: 95" in out
|
|
assert "**Bob**" in out
|
|
assert "• Score: 80" in out
|
|
assert out.startswith("Results:")
|
|
assert out.rstrip().endswith("Done.")
|
|
assert "|---" not in out
|
|
|
|
def test_plain_text_unchanged(self):
|
|
adapter = _make_discord_adapter()
|
|
text = "Hello world, no tables here."
|
|
assert adapter.format_message(text) == text
|
|
|
|
def test_code_block_table_unchanged(self):
|
|
adapter = _make_discord_adapter()
|
|
text = "```\n| a | b |\n|---|---|\n| 1 | 2 |\n```"
|
|
assert adapter.format_message(text) == text
|
|
|
|
def test_empty_string(self):
|
|
adapter = _make_discord_adapter()
|
|
assert adapter.format_message("") == ""
|