fork of https://f-hub.org/XMPP/xmpp-discord-bridge

xmpp: Use webhook.send

+21 -34
+21 -34
xmpp_discord_bridge/main.py
··· 16 from slixmpp.exceptions import XMPPError, IqError 17 from slixmpp.xmlstream import register_stanza_plugin 18 from slixmpp.jid import JID 19 - from discord import Status 20 import requests 21 22 from xmpp_discord_bridge.slixmpp.oob import OOBData ··· 194 str(vcard))) 195 196 # Aquire a webhook 197 - webhook_url = "" 198 for webhook in await dchannel.webhooks(): 199 if webhook.name == "discord-xmpp-bridge": 200 - webhook_url = webhook.url 201 break 202 - if not webhook_url: 203 - webhook = await dchannel.create_webhook(name="discord-xmpp-bridge", 204 - reason="Bridging Discord and XMPP") 205 - webhook_url = webhook.url 206 - self._webhooks[muc] = webhook_url 207 208 # TODO: Check if we need to set it 209 # Make sure our virtual users can join ··· 237 if not message["to"] == self._bot_jid_full: 238 return 239 240 - webhook = { 241 - "content": message["body"], 242 - "username": message["from"].resource 243 - } 244 - 245 - if self._relay_xmpp_avatars and self._avatars.get_avatar_url(message["from"]): 246 - webhook["avatar_url"] = self._avatars.get_avatar_url(message["from"]) 247 248 # Look for mentions and replace them 249 guild, channel = self._muc_map[muc] 250 for member in self._discord.get_guild(guild).get_channel(channel).members: 251 self._logger.debug("Checking %s", member.display_name) 252 - if "@" + member.display_name in webhook["content"]: 253 self._logger.debug("Found mention for %s. Replaceing.", 254 member.display_name) 255 - webhook["content"] = webhook["content"].replace("@" + member.display_name, 256 - member.mention) 257 258 if message["oob"]["url"] and message["body"] == message["oob"]["url"]: 259 - webhook["embed"] = [{ 260 - "type": "rich", 261 - "url": message["oob"]["url"] 262 - }] 263 264 - self._logger.debug("Webhook: %s", str(webhook)) 265 - 266 - req = requests.post(self._webhooks[muc], 267 - data=webhook, 268 - headers={ 269 - "Content-Type": "application/json" 270 - }) 271 - if req.status_code != 200: 272 - self._logger.error("Failed to POST to %s with content %s: %s", 273 - self._webhooks[muc], 274 - str(webhook), 275 - req.text) 276 277 def virtual_user_update_presence(self, muc, uid, pshow, pstatus=None): 278 """
··· 16 from slixmpp.exceptions import XMPPError, IqError 17 from slixmpp.xmlstream import register_stanza_plugin 18 from slixmpp.jid import JID 19 + from discord import Status, Embed 20 import requests 21 22 from xmpp_discord_bridge.slixmpp.oob import OOBData ··· 194 str(vcard))) 195 196 # Aquire a webhook 197 + wh = "" 198 for webhook in await dchannel.webhooks(): 199 if webhook.name == "discord-xmpp-bridge": 200 + wh webhook 201 break 202 + if not wh: 203 + wh = await dchannel.create_webhook(name="discord-xmpp-bridge", 204 + reason="Bridging Discord and XMPP") 205 + self._webhooks[muc] = wh 206 207 # TODO: Check if we need to set it 208 # Make sure our virtual users can join ··· 236 if not message["to"] == self._bot_jid_full: 237 return 238 239 + content = message["body"] 240 + embed = None 241 242 # Look for mentions and replace them 243 guild, channel = self._muc_map[muc] 244 for member in self._discord.get_guild(guild).get_channel(channel).members: 245 self._logger.debug("Checking %s", member.display_name) 246 + if "@" + member.display_name in content: 247 self._logger.debug("Found mention for %s. Replaceing.", 248 member.display_name) 249 + content = content.replace("@" + member.display_name, 250 + member.mention) 251 252 if message["oob"]["url"] and message["body"] == message["oob"]["url"]: 253 + embed = Embed(url=message["oob"]["url"], type="rich") 254 255 + try: 256 + await self._webhooks[muc].send(content=content, 257 + username=message["from"].resource, 258 + avatar_url=self._avatars.get_avatar_url(message["from"]), 259 + embed=embed) 260 + except Exception as err: 261 + self._logger.error("Webhook execution failed: %s", 262 + err) 263 264 def virtual_user_update_presence(self, muc, uid, pshow, pstatus=None): 265 """