$s=$pdo->prepare('SELECT t.*, l.ext_chat FROM plugin_communitybot_links l JOIN tickets t ON t.id = l.ticket_id WHERE l.platform = ? AND l.ext_user = ? AND t.ticket_number = ? ORDER BY l.id DESC LIMIT 1');
if($message==='')return'Bitte beschreiben Sie Ihr Anliegen: '.($platform==='telegram'?'/ticket Betreff | Nachricht':'/ticket mit Betreff und Nachricht');
if((int)$c->fetchColumn()>=$cfg['limit'])return'Sie haben in der letzten Stunde schon '.$cfg['limit'].' Tickets angelegt. Bitte versuchen Sie es später noch einmal oder ergänzen Sie ein bestehendes Ticket mit /antwort.';
$s=$pdo->prepare('SELECT t.ticket_number, t.subject, t.status FROM plugin_communitybot_links l JOIN tickets t ON t.id = l.ticket_id WHERE l.platform = ? AND l.ext_user = ? ORDER BY l.id DESC LIMIT 5');
$s->execute([$platform,$user]);
$rows=$s->fetchAll();
if(!$rows)return'Sie haben über diesen Kanal noch kein Ticket angelegt.';
return"Ihre letzten Tickets:\n".implode("\n",array_map(fn($t)=>'#'.$t['ticket_number'].' – '.status_label((string)$t['status'])[0].' – '.communitybot_clip((string)$t['subject'],50),$rows));
['name'=>'ticket','description'=>'Ein Support-Ticket anlegen','options'=>[$str('betreff','Worum geht es?',true,100),$str('nachricht','Bitte beschreiben Sie Ihr Anliegen',true,1000)]],
['name'=>'status','description'=>'Stand eines Tickets abfragen','options'=>[$str('nummer','Ticketnummer (leer lassen für Ihre letzten)',false,40)]],
['name'=>'antwort','description'=>'Zu einem Ihrer Tickets etwas hinzufügen','options'=>[$str('nummer','Ticketnummer',true,40),$str('text','Ihre Nachricht',true,1000)]],
];
}
functioncommunitybot_discord_register():array
{
$cfg=communitybot_config();
if($cfg['discord_app']===''||$cfg['discord_token']==='')return['ok'=>false,'message'=>'Bitte Anwendungs-ID und Bot-Token eintragen.'];
if($r['status']>=200&&$r['status']<300)return['ok'=>true,'message'=>'Die Befehle /ticket, /status und /antwort sind bei Discord eingetragen (es kann bis zu einer Stunde dauern, bis sie überall erscheinen).'];
return['ok'=>false,'message'=>'Discord hat abgelehnt (Status '.$r['status'].'): '.communitybot_clip((string)($r['json']['message']??$r['body']),200)];
// pro Nutzer nur einmal, auch wenn mehrere Verknüpfungen bestehen
$s=$pdo->prepare('SELECT platform, ext_user, MAX(ext_chat) AS ext_chat FROM plugin_communitybot_links WHERE ticket_id = ? GROUP BY platform, ext_user');
$t=$pdo->prepare('SELECT ticket_number, is_spam FROM tickets WHERE id = ?');
$t->execute([$ticketId]);
$ticket=$t->fetch();
if(!$ticket||!empty($ticket['is_spam']))return;
$m=$pdo->prepare("SELECT message FROM ticket_threads WHERE ticket_id = ? AND author_type = 'staff' AND is_internal_note = 0 ORDER BY id DESC LIMIT 1");
$m->execute([$ticketId]);
$msg=(string)$m->fetchColumn();
if($msg==='')return;
$text='Neue Antwort zu Ticket #'.$ticket['ticket_number'].":\n\n".communitybot_clip($msg,1200)."\n\nAntworten: /antwort ".$ticket['ticket_number'].' Ihre Nachricht';
$text='Ihr Ticket #'.$ticket['ticket_number'].' ist jetzt „'.status_label((string)$ticket['status'])[0].'“. Wenn noch etwas offen ist, antworten Sie mit /antwort '.$ticket['ticket_number'].' Ihre Nachricht.';
$depts=$pdo->query('SELECT id, name FROM departments ORDER BY name')->fetchAll();
$prios=$pdo->query('SELECT id, name FROM priorities ORDER BY sort_order')->fetchAll();
$recent=$pdo->query('SELECT l.*, t.ticket_number, t.subject, t.status FROM plugin_communitybot_links l JOIN tickets t ON t.id = l.ticket_id ORDER BY l.id DESC LIMIT 30')->fetchAll();
$week=(int)$pdo->query("SELECT COUNT(*) FROM plugin_communitybot_links WHERE created_at >= '".date('Y-m-d H:i:s',time()-7*86400)."'")->fetchColumn();
?>
<h1>Discord und Telegram</h1>
<?php if ($message): ?><div class="flash success"><?= e($message) ?></div><?php endif; ?>
<?php if ($error): ?><div class="flash error"><?= e($error) ?></div><?php endif; ?>
<?php if (!function_exists('sodium_crypto_sign_verify_detached')): ?><br><strong style="color:#b91c1c">Auf diesem Server fehlt die PHP-Erweiterung „sodium“, Discord-Anfragen können nicht geprüft werden.</strong><?php endif; ?>
</p>
<p class="muted" style="font-size:.82rem">Adressen für die Einrichtung (nur aus dem Internet erreichbar, mit https):<br>
<p class="muted" style="font-size:.82rem">Im Discord Developer Portal eine Anwendung anlegen. „General Information“ liefert die Anwendungs-ID und den öffentlichen Schlüssel (Public Key), „Bot“ das Token. Als „Interactions Endpoint URL“ die Adresse oben eintragen.</p>
"description":"Mitglieder legen per /ticket im Discord oder in Telegram ein Ticket an, bekommen die Ticketnummer zurück und werden bei Antworten und bei Lösung benachrichtigt. Der Server nimmt die Anfragen direkt entgegen, ein eigener Bot-Server ist nicht nötig. Weitere Befehle: /status und /antwort.",
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.