Slixfeed/slixfeed/xmpp/profile.py
Schimon Jehudah afeaa8707b Add more permissions to ad-hoc commands from MUC (see Prosody mod_muc_adhoc_bots)
Handle more errors.
Add ad-hoc command Profile.
Support Python 3.10 (tomli).
Add table for scraping HTML (WIP).
Minor fixes.
2024-02-25 01:52:24 +00:00

106 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
NOTE
The VCard XML fields that can be set are as follows:
FN, NICKNAME, URL, BDAY, ROLE, NOTE, MAILER,
TZ, REV, UID, DESC, TITLE, PRODID, SORT-STRING,
N, ADR, TEL, EMAIL, JABBERID, ORG, CATEGORIES,
NOTE, PRODID, REV, SORT-STRING, SOUND, UID, URL,
CLASS, KEY, MAILER, GEO, TITLE, ROLE,
LOGO, AGENT
TODO
1) Test XEP-0084.
2) Make sure to support all type of servers.
3) Catch IqError
ERROR:slixmpp.basexmpp:internal-server-error: Database failure
WARNING:slixmpp.basexmpp:You should catch IqError exceptions
"""
import glob
from slixfeed.config import get_value, get_default_config_directory
# from slixmpp.exceptions import IqTimeout, IqError
# import logging
import os
# class XmppProfile:
async def update(self):
"""
Update profile.
"""
await set_vcard(self)
await set_avatar(self)
async def set_avatar(self):
config_dir = get_default_config_directory()
if not os.path.isdir(config_dir):
config_dir = '/usr/share/slixfeed/'
filename = glob.glob(config_dir + '/image.*')
if not filename and os.path.isdir('/usr/share/slixfeed/'):
# filename = '/usr/share/slixfeed/image.svg'
filename = glob.glob('/usr/share/slixfeed/image.*')
if not filename:
config_dir = os.path.dirname(__file__)
config_dir = config_dir.split('/')
config_dir.pop()
config_dir = '/'.join(config_dir)
filename = glob.glob(config_dir + '/assets/image.*')
if len(filename):
filename = filename[0]
image_file = os.path.join(config_dir, filename)
with open(image_file, 'rb') as avatar_file:
avatar = avatar_file.read()
# await self.plugin['xep_0084'].publish_avatar(avatar)
await self.plugin['xep_0153'].set_avatar(avatar=avatar)
def set_identity(self, category):
"""
Identify for Service Descovery.
Parameters
----------
category : str
"client" or "service".
Returns
-------
None.
"""
self['xep_0030'].add_identity(
category=category,
itype='news',
name='slixfeed',
node=None,
jid=self.boundjid.full,
)
async def set_vcard(self):
vcard = self.plugin['xep_0054'].make_vcard()
fields = {
'BDAY': 'birthday',
'DESC': 'description',
'FN': 'name',
'NICKNAME': 'nickname',
'NOTE': 'note',
'ORG': 'organization',
'ROLE': 'role',
'TITLE': 'title',
'URL': 'url',
}
for key in fields:
vcard[key] = get_value('accounts', 'XMPP Profile', fields[key])
await self.plugin['xep_0054'].publish_vcard(vcard)