Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
							 
						
Примечание: В настоящее время эта функция требует доступа к сайту с помощью встроенного браузера Safari.
Ну да. Из подвала стук какой-то, а что за стук...Нужен пример запроса, сейчас непонятно нифига.
If the API key selected is a super user key, you may pass the user ID of the context user via the XF-Api-User header. If no user ID is passed, the context will default to a guest.
If the request is made with a super user key and you wish to bypass the context user's permissions, this may be done on a per-request basis by setting the api_bypass_permissions parameter to 1. (This can be passed via a query string or as part of the request body.)
многие вещи возможны, но мы сюда не гадать пришлиВозможно
def change_nickname(old_nickname, new_nickname):
find_user_url = f"{XENFORO_FORUM_URL}users/find-name"
    headers = {
'Content-Type': 'application/json',
        'XF-Api-Key': XENFORO_USER_API_KEY
    }
params = {'username': old_nickname}
response = requests.get(find_user_url, headers=headers, params=params)
    user_data = response.json()
if 'exact' in user_data and user_data['exact']:
user_id = user_data['exact']['user_id']
update_user_url = f"{XENFORO_FORUM_URL}users/{user_id}/"
        data = {
 'username': new_nickname
        }
response = requests.post(update_user_url, headers=headers, data=json.dumps(data))
print(f"Response status code: {response.status_code}")
print(f"Response content: {response.content}")
        update_response = response.json()
 print(update_response)
if 'success' in update_response and update_response['success']:
return True, "Nickname changed successfully."
        else:
if 'errors' in update_response:
error_message = update_response['errors'][0]['message']
return False, f"Failed to update nickname: {error_message}"
            return False, "Failed to update nickname for an unknown reason."
    else:
 return False, "User not found."update_user_url = f"{XENFORO_FORUM_URL}users/{user_id}/"
        data = {
 'username': new_nickname
        }
response = requests.post(update_user_url, headers=headers, data=json.dumps(data))
print(f"Response status code: {response.status_code}")
print(f"Response content: {response.content}")
        update_response = response.json()
 print(update_response)
if 'success' in update_response and update_response['success']:
return True, "Nickname changed successfully."
        else:
if 'errors' in update_response:
error_message = update_response['errors'][0]['message']
return False, f"Failed to update nickname: {error_message}"
            return False, "Failed to update nickname for an unknown reason."
    else:
 return False, "User not found."Возможно, ты хочешь что-то отредактировать в профиле пользователя.(скинь пример запроса)
Указывай в запросе XF-Api-User, либо ставь параметр api_bypass_permissions 1.
У Вас недостаточно прав для просмотра ссылок. Вход или Регистрация
If the API key selected is a super user key, you may pass the user ID of the context user via the XF-Api-User header. If no user ID is passed, the context will default to a guest.
Если очень хочется "срать жсонами", то можно установить мой плагин, которое "научит" движок читать JSON.Requests bodies must be sent using theapplication/x-www-form-urlencodedencoding or, if a file is being uploaded, themultipart/form-dataencoding.
Т.к. Вы не указываете явно какого-либо пользователя, то движок стандартно исполняет Ваш запрос "от имени гостя", у которого, естественно, нет прав на такие махинации. Именно если используется супер-ключ.If the API key selected is a super user key, you may pass the user ID of the context user via theXF-Api-Userheader. If no user ID is passed, the context will default to a guest.
api_bypass_permissions, если мы насильно меняем никнейм, либо указать контекстом пользователя, от кого меняем.#!/usr/bin/env python3
from requests import Session
class ForumManager:
    def __init__(self, url, key, headers={}):
        self._url = url
        self._key = key
        self._headers = headers
    def _session(self):
        session = Session()
        session.headers.update({**{
            'XF-API-Key': self._key
        }, **self._headers})
        return session
    def find_user_by_name(self, name):
        with self._session() as session:
            return session.get(f'{self._url}users/find-name', params={'username': name}).json()['exact']
    def edit_user(self, user_id, bypass_permissions=False, **kwargs):
        with self._session() as session:
            params = {
                'api_bypass_permissions': 1 if bypass_permissions else 0
            }
            response = session.post(f'{self._url}users/{user_id}/', params=params, data=kwargs)
            response.raise_for_status()
            return response.json()['user']
manager = ForumManager('http://localhost/index.php?api/', 'mRi1HkG-0xSDEZ8kO703xPV909h3-_UL')
user = manager.find_user_by_name('Dummy')
print(f'Found user with ID {user["user_id"]}, changing username...')
edited_user = manager.edit_user(user['user_id'], True, username='Чебурекw')
print(f'Done, now user with ID {user["user_id"]} is named as {edited_user["username"]}')
Спасибо, я читал документацию, но половины не понял такая английский плохой, а русской документации xenforo нет. Еще раз спасибо.Ну вообще-то Ксен не поддерживает JSON в виде тела, о чём прямо в их документации сказано:У Вас недостаточно прав для просмотра ссылок. Вход или Регистрация
Если очень хочется "срать жсонами", то можно установить моё дополнение, которое "научит" движок читать JSON.
Так же в этой же документации указано очень важное замечание:
Т.к. Вы не указываете явно какого-либо пользователя, то движок стандартно исполняет Ваш запрос "от имени гостя", у которого, естественно, нет прав на такие махинации. Именно если используется супер-ключ.
Так что решение проблемы - добавить параметрapi_bypass_permissions, если мы насильно меняем никнейм, либо указать контекстом пользователя, от кого меняем.
Мне было очень больно читать Ваш код без вменяемой табуляции, так что я сделал свой, делающий похожую вещь, и немного более абстрагированный.
Посмотреть вложение 154144Python:#!/usr/bin/env python3 from requests import Session class ForumManager: def __init__(self, url, key, headers={}): self._url = url self._key = key self._headers = headers def _session(self): session = Session() session.headers.update({**{ 'XF-API-Key': self._key }, **self._headers}) return session def find_user_by_name(self, name): with self._session() as session: return session.get(f'{self._url}users/find-name', params={'username': name}).json()['exact'] def edit_user(self, user_id, bypass_permissions=False, **kwargs): with self._session() as session: params = { 'api_bypass_permissions': 1 if bypass_permissions else 0 } response = session.post(f'{self._url}users/{user_id}/', params=params, data=kwargs) response.raise_for_status() return response.json()['user'] manager = ForumManager('http://localhost/index.php?api/', 'mRi1HkG-0xSDEZ8kO703xPV909h3-_UL') user = manager.find_user_by_name('Dummy') print(f'Found user with ID {user["user_id"]}, changing username...') edited_user = manager.edit_user(user['user_id'], True, username='Чебурекw') print(f'Done, now user with ID {user["user_id"]} is named as {edited_user["username"]}')

Мы используем основные cookies для обеспечения работы этого сайта, а также дополнительные cookies для обеспечения максимального удобства пользователя.
Посмотрите дополнительную информацию и настройте свои предпочтения
 
				