tangled
alpha
login
or
join now
zenfyr.dev
/
xmpp-discord-bridge
0
fork
atom
fork of https://f-hub.org/XMPP/xmpp-discord-bridge
0
fork
atom
overview
issues
pulls
pipelines
xmpp: Use webhook.send
Alexander PapaTutuWawa
4 years ago
3bafcb91
edf70774
+21
-34
1 changed file
expand all
collapse all
unified
split
xmpp_discord_bridge
main.py
+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
0
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
0
0
0
0
0
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")
0
0
0
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)
0
0
0
0
263
264
def virtual_user_update_presence(self, muc, uid, pshow, pstatus=None):
265
"""