Add artisan command for adding moderator permissions
This commit is contained in:
parent
66ed47b35b
commit
8fa7e52254
86
app/Console/Commands/AddChannelPermissions.php
Normal file
86
app/Console/Commands/AddChannelPermissions.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\ChannelPermission;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
use App\Models\Trace\Channel as TraceChannel;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
|
class AddChannelPermissions extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'app:add-channel-permissions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Provide a list of users that should have access to a channel.';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of known bots.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $knownBots = [
|
||||||
|
'moobot',
|
||||||
|
'nightbot',
|
||||||
|
'streamelements',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Twitch API endpoint for getting user details.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $usersApi = 'https://twitch-api-proxy.cactus.workers.dev/direct/users';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
// Give the user a list of channels to choose from.
|
||||||
|
$channels = TraceChannel::all();
|
||||||
|
$channel = $this->choice('Which channel would you like to add permissions to?', $channels->pluck('channel_login')->toArray());
|
||||||
|
$channel = $channels->where('channel_login', $channel)->first();
|
||||||
|
|
||||||
|
$users = $this->ask('Which users (moderators) would you like to add to this channel? (comma separated list of usernames)');
|
||||||
|
|
||||||
|
$users = explode(',', $users);
|
||||||
|
$users = array_map('trim', $users);
|
||||||
|
|
||||||
|
// Filter out any known bots.
|
||||||
|
$users = array_filter($users, function ($user) {
|
||||||
|
return !in_array(strtolower($user), $this->knownBots);
|
||||||
|
});
|
||||||
|
|
||||||
|
$users = array_values($users);
|
||||||
|
|
||||||
|
// Get the user details from the Twitch API.
|
||||||
|
$response = Http::get($this->usersApi, [
|
||||||
|
'login' => $users,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$result = $response->json();
|
||||||
|
$users = $result['data'];
|
||||||
|
|
||||||
|
foreach ($users as $user) {
|
||||||
|
$this->info('Adding ' . $user['display_name'] . ' to ' . $channel->channel_login);
|
||||||
|
|
||||||
|
$permission = ChannelPermission::firstOrCreate([
|
||||||
|
'user_provider_id' => $user['id'],
|
||||||
|
'channel_provider_id' => $channel->channel_id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$permission->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,4 +10,14 @@ class ChannelPermission extends Model
|
|||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $table = 'channel_permissions';
|
protected $table = 'channel_permissions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $fillable = [
|
||||||
|
'user_provider_id',
|
||||||
|
'channel_provider_id',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user