Untitled diff

Created Diff never expires
40 削除
合計
削除
単語
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diffchecker logo
Diffchecker Pro
109
38 追加
合計
追加
単語
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diffchecker logo
Diffchecker Pro
108
<?php
<?php


class NixFifty_Discord_Helper
class NixFifty_Discord_Helper
{
{
public static function getCRC32($input)
public static function getCRC32($input)
{
{
return hash('crc32', $input);
return hash('crc32', $input);
}
}


public function setUserServerGroupsById(XenForo_Model_UserExternal $model = null, $userId)
public function setUserServerGroupsById(XenForo_Model_UserExternal $model = null, $userId)
{
{
if (is_null($model))
if (is_null($model))
{
{
$model = XenForo_Model::create('XenForo_Model_UserExternal');
$model = XenForo_Model::create('XenForo_Model_UserExternal');
}
}


$xenOptions = XenForo_Application::getOptions();
$xenOptions = XenForo_Application::getOptions();


if ($xenOptions->nfDiscordEnableSync)
if ($xenOptions->nfDiscordEnableSync)
{
{
$api = new NixFifty_Discord_Api_Guild();
$api = new NixFifty_Discord_Api_Guild();
$externalUser = $model->getExternalAuthAssociationForUser('discord', $userId);
$externalUser = $model->getExternalAuthAssociationForUser('discord', $userId);
if(!$externalUser)
if(!$externalUser)
{
{
return false;
return false;
}
}
/* @var XenForo_Model_User $userModel */
/* @var XenForo_Model_User $userModel */
$userModel = XenForo_Model::create('XenForo_Model_User');
$userModel = XenForo_Model::create('XenForo_Model_User');
$user = $userModel->getUserById($userId);
$user = $userModel->getUserById($userId);


$userGroups = explode(',', $user['secondary_group_ids']);
$userGroups = explode(',', $user['secondary_group_ids']);
$userGroups[] = $user['user_group_id'];
$userGroups[] = $user['user_group_id'];


/** @var XenForo_Model_UserGroup $userGroupModel */
/** @var XenForo_Model_UserGroup $userGroupModel */
$userGroupModel = XenForo_Model::create('XenForo_Model_UserGroup');
$userGroupModel = XenForo_Model::create('XenForo_Model_UserGroup');


$roleIds = array();
$discordRoles = array();


foreach($userGroups as $userGroup)
foreach($userGroups as $userGroup)
{
{
$group = $userGroupModel->getUserGroupById($userGroup);
$group = $userGroupModel->getUserGroupById($userGroup);
if ($group)
if ($group)
{
{
if (array_key_exists('nfd_server_group_ids', $group) && strlen($group['nfd_server_group_ids']) > 0)
if (array_key_exists('nfd_server_group_ids', $group) && array_key_exists('display_style_priority', $group))
{
{
if (strpos($group['nfd_server_group_ids'], ',') !== false)
$groupRoles = $group['nfd_server_group_ids'];
{
$groupStyle = $group['display_style_priority'];
$ids = explode(',', $group['nfd_server_group_ids']);
$roleIds = array_merge($roleIds, $ids);
if (strlen($groupRoles) > 0)
}
{
}
if ($groupStyle > 0)
else
{
{
if (!isset($highestStyle) || $groupStyle > $highestStyle)
continue;
{
}
$highestRoles = $groupRoles;
}
$highestStyle = $groupStyle;
else
}
{
}
continue;
else
}
{
}
$discordRoles = array_merge($discordRoles, explode(',', $groupRoles));
$roleIds = array_unique($roleIds, SORT_NUMERIC);
}
}
}
}
}
if (isset($highestRoles))
{
$discordRoles = array_merge($discordRoles, explode(',', $highestRoles));
}

$discordId = $externalUser['provider_key'];
$discordId = $externalUser['provider_key'];


$discordUser = $api->getGuildMember($discordId);
// compare the new list of groups to the existing list and only add client to groups they're not already in
$api->wipeUserRoles($discordId);
return $api->patchGuildMemberRoles($discordId, $discordRoles);
if (array_key_exists('roles', $discordUser))
{
if (sizeof($roleIds) > 0 )
{
foreach($roleIds as $roleId)
{
$api->addGuildMemberRole($discordId, $roleId);
}
}
}
return true;
}
}


return false;
return false;
}
}


public function setUsersServerGroupsByIds(array $ids = array())
public function setUsersServerGroupsByIds(array $ids = array())
{
{
if (count($ids) > 0)
if (count($ids) > 0)
{
{
/** @var XenForo_Model_UserExternal $model */
/** @var XenForo_Model_UserExternal $model */
$model = XenForo_Model::create('XenForo_Model_UserExternal');
$model = XenForo_Model::create('XenForo_Model_UserExternal');


foreach($ids as $id)
foreach($ids as $id)
{
{
$this->setUserServerGroupsById($model, $id);
$this->setUserServerGroupsById($model, $id);
}
}
}
}
}
}


public static function _assertDiscordConfigured()
public static function _assertDiscordConfigured()
{
{
$options = XenForo_Application::getOptions();
$options = XenForo_Application::getOptions();


if (empty($options->nfDiscordGuildId) ||
if (empty($options->nfDiscordGuildId) ||
empty($options->nfDiscordToken) ||
empty($options->nfDiscordToken) ||
empty($options->nfDiscordAppKey) ||
empty($options->nfDiscordAppKey) ||
empty($options->nfDiscordAppSecret))
empty($options->nfDiscordAppSecret))
{
{
throw new XenForo_Exception(new XenForo_Phrase('nf_discord_discord_not_configured'), true);
throw new XenForo_Exception(new XenForo_Phrase('nf_discord_discord_not_configured'), true);
}
}
}
}
}
}