<?php
class PatreonService
{
private $redirect_uri = "";
private $translateService;
public $patreonWebClient;
public static $programLevel1 = "level1";
public static $programLevel2 = "level2";
public static $programLevel3 = "level3";
private $patreonDbHandler;
function __construct(TranslateService $translateService)
{
$this->patreonWebClient = new PatreonWebClient($translateService->botUsername);
$this->translateService = $translateService;
$this->patreonDbHandler = new PatreonDatabaseHandler("notimportant");
}
function getPatreonWebClient(): PatreonWebClient {
return $this->patreonWebClient;
}
function getTS(): TranslateService
{
return $this->translateService;
}
function getDB(): PatreonDatabaseHandler
{
return $this->patreonDbHandler;
}
function createLoginLink()
{
return $this->patreonWebClient->createLoginLink();
}
function sendJoinRequest(){
if($this->isUserOf(PatreonService::$programLevel1)){
return false;
}
$loginLink = $this->createLoginLink();
$askForPromote ="سلام عزیزم";
$askForPromote = $askForPromote.PHP_EOL."در صورتی که از عملکرد ربات لغتنامه راضی هستی";
$askForPromote = $askForPromote.PHP_EOL."خیلی خوشحال می شم که با حمایت مالی ماهیانه از این ربات";
$askForPromote = $askForPromote.PHP_EOL."به پیشرفت و توسعه و نگهداریش کمک کنی";
$askForPromote = $askForPromote.PHP_EOL."با استفاده از لینک زیر می تونی طرح های حمایت از ربات لغتنامه رو ببینی";
$askForPromote = $askForPromote.PHP_EOL."خیلی ممنون";
$pageLink = PHP_EOL.PHP_EOL."https://www.patreon.com/bayadic?fan_landing=true".PHP_EOL.PHP_EOL;
$askForPromote.=$pageLink;
$askForLogin ="اگه قبلا عضو یکی از طرح های حمایتی از ربات لغتنامه شدی می تونی از طریق لینک زیر وارد بشی؟";
$text=$askForPromote.PHP_EOL.PHP_EOL.$askForLogin.PHP_EOL.$loginLink;
$this->getTS()->sendMessage($text, $this->getTS()->getUser()->chatId);
$this->getTS()->getDB()->insertUserActivity($this->getTS()->chat_id,"sendJoinPatreon","120");
}
function oathUserViaCode($code)
{
$tokens = $this->patreonWebClient->retriveTokens($code);
if (isset($tokens['access_token'])) {
$accessToken = $tokens['access_token'];
$refreshToken = $tokens['refresh_token'];
$user = $this->patreonWebClient->retriveUserDetailsByToken($accessToken);
if(sizeof($user['data']['relationships']['memberships'])>0){
$patreon_plan_id = $user['data']['relationships']['memberships']['data'][0]['id'];
}
$this->getDB()->updateOrInsert(
$this->getTS()->chat_id,
$user['data']['id'],
$patreon_plan_id, $accessToken, $refreshToken);
return $user;
} else {
return false;
}
}
function isLastUpdatedMoreThan2Days($patreonData){
if(!isset($patreonData)) return true;
$now = time(); // or your date as well
$lastUpdated = strtotime($patreonData['time_stamp']);
$datediff = $now - $lastUpdated;
// $dt->setTimezone(new DateTimeZone("Europe/Berlin"));
if($datediff >= 0){
return true;
}
return false;
}
function isUserStillInProgramm($patreonData){
$members = $this->patreonWebClient->retriveCampaignMembers($patreonData);
foreach($members as $member){
if($member['id']==$patreonData['user_access_token']){
return true;
}
return false;
}
}
function isUserOf($requiredStatus)
{
$patreonData = $this->patreonDbHandler->getPatreonData($this->getTS()->chat_id);
if(!isset($patreonData))
{
return false;
}
if($this->isLastUpdatedMoreThan2Days($patreonData)){
if($this->isUserStillInProgramm($patreonData)){
return true;
} else {
return false;
}
}
else {
if(isset($patreonData)){
return $patreonData['status'] == $requiredStatus;
}
return false;
}
}
}