Skip to content

Commit e311828

Browse files
committed
Improved UI for group conversations, LOG_DISCORD, snippet fix
1 parent 2682d58 commit e311828

File tree

6 files changed

+72
-5
lines changed

6 files changed

+72
-5
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66
This project mostly adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html);
77
however, insignificant breaking changes do not guarantee a major version bump, see the reasoning [here](https://github.com/kyb3r/modmail/issues/319). If you're a plugin developer, note the "BREAKING" section.
88

9+
# v3.10.3
10+
11+
### Improved
12+
13+
- Thread genesis message now shows other recipients.
14+
15+
### Fixed
16+
17+
- `?snippet add` now properly blocks command names.
18+
19+
### Internal
20+
21+
- Set `LOG_DISCORD` environment variable to the logger level and log discord events.
22+
923
# v3.10.2
1024
This is a hotfix for react to contact.
1125

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<br>
77

88
<a href="#">
9-
<img src="https://img.shields.io/badge/Latest%20Version-v3.10.2-7289da?style=for-the-badge&logo=data:image/gif;base64,R0lGODlhGAAYAPcAAAAAADQ+Yj5MdThCaEFOekNQfWt5e1lqfEdVhVpriVx1iVtsnFZpll1xlF1znFx5mGNtjGR7hWNzjGd5iWJunGNslmN0lGl1lGN5lWt7lWR0nGp1nWR5nGt8nHJ9l3J9jFxto1xtqlZqqF5zpF15pV10rVx5q1Z2ql1us150s114sV50uVd1smJupGNurGN0pGp1pGR6o2t7o2F0rml0rGR5rGt8q3J9pGNus2Fvu2Bzs2p2smR5s2t7tGF0u2N6vGp7u2l1uXJ+uGJ1wWV7w2l+xWl+yl5zwHWDiWyCmHODnHiGmHSLkW2CpGuEqnSCpHqMo3ODrHWKrXyMq3iHp3yTqGyEtWqFunKDs3uLtHSGvXSMvHuMu3eItnyTs3yTu3iUuW+RsV+ApmuCxG2Dy22LxnSMxHuMxHGGzXSLzXqLzXWFxXyTw3uSy3WSx26E0W+N2m+L1XKG03SL1XmL1HOL2HmL23WF2XiS1m+QyHOK4XmL4XaH4nGM5ImXm4WOlJSjnoOOq4OOpYSUrImXqJOcqYONt4OUtIybtIOUu4ycvImYt5OcuIyiqZekqYyiupOjvJurvJimtp+yvqKruae2ua23trLCucPHvIOMxoOUxIuaw4eYyJKbyISW1YiW0o2kyJWlxJqpxZWkzJury5aoxp6xxZ2zyZio1Jyy2Yuk0aOsyKOyxKOzzKy8zKq2yLO7xqOr1KSz1Ku706W026y73Ki21bK716u75LS95KSu4Zyx6bPDzLjGx63B2LPD1LTE3LvL3brI17/S2bbKzrTE47rF47zM5L3M67bH577R5L7R67zK8rjM8MLM3MPK1sTT3crU3MjW2dLZ2srUy8PN5MTO68nP68jL48TS5MnT5cbR68jS7M3b7Mva5dTb6MTO8srO8szF8MXR8snS8c3a8cnY+NXb9tDL7dnm6dzk8tro99Pq9uTp6+r17fr77eTr/efr+Oz09OXz/Ov0/e37/uj39fX19fX89fz+9vP1/fX9/f7//vr2/ODl4sK75yH5BAEAAAAALAAAAAAYABgAAAj/AAEAmFOnoMGDCAvGmRNHYMKHEOdIhEgRIcGKGDMeTJVO00WNBj194/frFik5IOvgqdaP371N26xpefORYq57/HI+s7Vtmy0eKCmmapcz575FPXt+SfHmociiRae1SroNWIoVTQ2uxAk15yJg1awl7ZSCaUE82uRxhTpt1TNXq0Ip2pSobIqCc0iVoqsI0ipXr1bhywfVXxYdiA3Sourz2dqc8lbNQJz4bDWqix73E7ZjhgrKOjYmvfWLbZcZqCdTPjjHGLdtibi2U5Q6NWiEqqq64ifvVe3at1nX2tTuWQ/QyIMfxHOGi+rkyeMklPMDuvWaBqlbj469IPUU2ykPCOw+53t4AAEBADs=">
9+
<img src="https://img.shields.io/badge/Latest%20Version-v3.10.3-7289da?style=for-the-badge&logo=data:image/gif;base64,R0lGODlhGAAYAPcAAAAAADQ+Yj5MdThCaEFOekNQfWt5e1lqfEdVhVpriVx1iVtsnFZpll1xlF1znFx5mGNtjGR7hWNzjGd5iWJunGNslmN0lGl1lGN5lWt7lWR0nGp1nWR5nGt8nHJ9l3J9jFxto1xtqlZqqF5zpF15pV10rVx5q1Z2ql1us150s114sV50uVd1smJupGNurGN0pGp1pGR6o2t7o2F0rml0rGR5rGt8q3J9pGNus2Fvu2Bzs2p2smR5s2t7tGF0u2N6vGp7u2l1uXJ+uGJ1wWV7w2l+xWl+yl5zwHWDiWyCmHODnHiGmHSLkW2CpGuEqnSCpHqMo3ODrHWKrXyMq3iHp3yTqGyEtWqFunKDs3uLtHSGvXSMvHuMu3eItnyTs3yTu3iUuW+RsV+ApmuCxG2Dy22LxnSMxHuMxHGGzXSLzXqLzXWFxXyTw3uSy3WSx26E0W+N2m+L1XKG03SL1XmL1HOL2HmL23WF2XiS1m+QyHOK4XmL4XaH4nGM5ImXm4WOlJSjnoOOq4OOpYSUrImXqJOcqYONt4OUtIybtIOUu4ycvImYt5OcuIyiqZekqYyiupOjvJurvJimtp+yvqKruae2ua23trLCucPHvIOMxoOUxIuaw4eYyJKbyISW1YiW0o2kyJWlxJqpxZWkzJury5aoxp6xxZ2zyZio1Jyy2Yuk0aOsyKOyxKOzzKy8zKq2yLO7xqOr1KSz1Ku706W026y73Ki21bK716u75LS95KSu4Zyx6bPDzLjGx63B2LPD1LTE3LvL3brI17/S2bbKzrTE47rF47zM5L3M67bH577R5L7R67zK8rjM8MLM3MPK1sTT3crU3MjW2dLZ2srUy8PN5MTO68nP68jL48TS5MnT5cbR68jS7M3b7Mva5dTb6MTO8srO8szF8MXR8snS8c3a8cnY+NXb9tDL7dnm6dzk8tro99Pq9uTp6+r17fr77eTr/efr+Oz09OXz/Ov0/e37/uj39fX19fX89fz+9vP1/fX9/f7//vr2/ODl4sK75yH5BAEAAAAALAAAAAAYABgAAAj/AAEAmFOnoMGDCAvGmRNHYMKHEOdIhEgRIcGKGDMeTJVO00WNBj194/frFik5IOvgqdaP371N26xpefORYq57/HI+s7Vtmy0eKCmmapcz575FPXt+SfHmociiRae1SroNWIoVTQ2uxAk15yJg1awl7ZSCaUE82uRxhTpt1TNXq0Ip2pSobIqCc0iVoqsI0ipXr1bhywfVXxYdiA3Sourz2dqc8lbNQJz4bDWqix73E7ZjhgrKOjYmvfWLbZcZqCdTPjjHGLdtibi2U5Q6NWiEqqq64ifvVe3at1nX2tTuWQ/QyIMfxHOGi+rkyeMklPMDuvWaBqlbj469IPUU2ykPCOw+53t4AAEBADs=">
1010
</a>
1111

1212
<br>

bot.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "3.10.2"
1+
__version__ = "3.10.3"
22

33

44
import asyncio
@@ -1694,6 +1694,15 @@ def main():
16941694
)
16951695
sys.exit(0)
16961696

1697+
if os.environ.get("LOG_DISCORD"):
1698+
logger.debug(f"Discord logging enabled: {os.environ['LOG_DISCORD'].upper()}")
1699+
d_logger = logging.getLogger("discord")
1700+
1701+
d_logger.setLevel(os.environ["LOG_DISCORD"].upper())
1702+
handler = logging.FileHandler(filename="discord.log", encoding="utf-8", mode="w")
1703+
handler.setFormatter(logging.Formatter("%(asctime)s:%(levelname)s:%(name)s: %(message)s"))
1704+
d_logger.addHandler(handler)
1705+
16971706
bot = ModmailBot()
16981707
bot.run()
16991708

cogs/modmail.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ async def snippet_add(self, ctx, name: str.lower, *, value: commands.clean_conte
212212
color=self.bot.error_color,
213213
description=f"A command with the same name already exists: `{name}`.",
214214
)
215+
return await ctx.send(embed=embed)
215216
elif name in self.bot.snippets:
216217
embed = discord.Embed(
217218
title="Error",
@@ -813,6 +814,16 @@ async def removeuser(self, ctx, *users_arg: Union[discord.Member, discord.Role,
813814
ctx.command.reset_cooldown(ctx)
814815
return
815816

817+
if not users:
818+
em = discord.Embed(
819+
title="Error",
820+
description="No valid users to remove.",
821+
color=self.bot.error_color,
822+
)
823+
await ctx.send(embed=em)
824+
ctx.command.reset_cooldown(ctx)
825+
return
826+
816827
if not silent:
817828
description = self.bot.formatter.format(
818829
self.bot.config["private_removed_from_group_response"], moderator=ctx.author

core/thread.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def __init__(
5151
self._recipient = recipient
5252
self._other_recipients = other_recipients or []
5353
self._channel = channel
54-
self.genesis_message = None
54+
self._genesis_message = None
5555
self._ready_event = asyncio.Event()
5656
self.wait_tasks = []
5757
self.close_task = None
@@ -140,6 +140,15 @@ async def from_channel(cls, manager: "ThreadManager", channel: discord.TextChann
140140

141141
return thread
142142

143+
async def get_genesis_message(self) -> discord.Message:
144+
if self._genesis_message is None:
145+
async for m in self.channel.history(limit=5, oldest_first=True):
146+
if m.author == self.bot.user:
147+
if m.embeds and m.embeds[0].fields and m.embeds[0].fields[0].name == "Roles":
148+
self._genesis_message = m
149+
150+
return self._genesis_message
151+
143152
async def setup(self, *, creator=None, category=None, initial_message=None):
144153
"""Create the thread channel and other io related initialisation tasks"""
145154
self.bot.dispatch("thread_initiate", self, creator, category, initial_message)
@@ -195,7 +204,7 @@ async def send_genesis_message():
195204
try:
196205
msg = await channel.send(mention, embed=info_embed)
197206
self.bot.loop.create_task(msg.pin())
198-
self.genesis_message = msg
207+
self._genesis_message = msg
199208
except Exception:
200209
logger.error("Failed unexpectedly:", exc_info=True)
201210

@@ -1131,6 +1140,26 @@ async def set_title(self, title: str) -> None:
11311140

11321141
await self.channel.edit(topic=f"Title: {title}\nUser ID: {user_id}\nOther Recipients: {ids}")
11331142

1143+
async def _update_users_genesis(self):
1144+
genesis_message = await self.get_genesis_message()
1145+
embed = genesis_message.embeds[0]
1146+
value = " ".join(x.mention for x in self._other_recipients)
1147+
index = None
1148+
for n, field in enumerate(embed.fields):
1149+
if field.name == "Other Recipients":
1150+
index = n
1151+
break
1152+
1153+
if index is None and value:
1154+
embed.add_field(name="Other Recipients", value=value, inline=False)
1155+
else:
1156+
if value:
1157+
embed.set_field_at(index, value=value)
1158+
else:
1159+
embed.remove_field(index)
1160+
1161+
await genesis_message.edit(embed=embed)
1162+
11341163
async def add_users(self, users: typing.List[typing.Union[discord.Member, discord.User]]) -> None:
11351164
title = match_title(self.channel.topic)
11361165
user_id = match_user_id(self.channel.topic)
@@ -1139,6 +1168,8 @@ async def add_users(self, users: typing.List[typing.Union[discord.Member, discor
11391168
ids = ",".join(str(i.id) for i in self._other_recipients)
11401169
await self.channel.edit(topic=f"Title: {title}\nUser ID: {user_id}\nOther Recipients: {ids}")
11411170

1171+
await self._update_users_genesis()
1172+
11421173
async def remove_users(self, users: typing.List[typing.Union[discord.Member, discord.User]]) -> None:
11431174
title = match_title(self.channel.topic)
11441175
user_id = match_user_id(self.channel.topic)
@@ -1148,6 +1179,8 @@ async def remove_users(self, users: typing.List[typing.Union[discord.Member, dis
11481179
ids = ",".join(str(i.id) for i in self._other_recipients)
11491180
await self.channel.edit(topic=f"Title: {title}\nUser ID: {user_id}\nOther Recipients: {ids}")
11501181

1182+
await self._update_users_genesis()
1183+
11511184

11521185
class ThreadManager:
11531186
"""Class that handles storing, finding and creating Modmail threads."""

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ extend-exclude = '''
2121

2222
[tool.poetry]
2323
name = 'Modmail'
24-
version = '3.10.2'
24+
version = '3.10.3'
2525
description = "Modmail is similar to Reddit's Modmail, both in functionality and purpose. It serves as a shared inbox for server staff to communicate with their users in a seamless way."
2626
license = 'AGPL-3.0-only'
2727
authors = [

0 commit comments

Comments
 (0)