Weitere APIs
Diese Seite behandelt Chat, Ankuendigungen, Hashtags, Einladungscodes und Service-Worker-Push-Benachrichtigungen.
ChatApi
client.chat bietet Direktnachrichten und Gruppenraum-Messaging. Alle Chat-Endpunkte erfordern Authentifizierung.
Verlauf und Lesestatus
// Aktueller DM-Gespraechsverlauf
final dmHistory = await client.chat.history(limit: 10);
// Aktueller Raumverlauf
final roomHistory = await client.chat.history(limit: 10, room: true);
// Alle Nachrichten als gelesen markieren
await client.chat.readAll();
Direktnachrichten
// Eine Nachricht an einen Benutzer senden
final msg = await client.chat.messages.createToUser(
toUserId: targetUserId,
text: 'Hello!',
);
// Eine Drive-Datei anhaengen
final msg = await client.chat.messages.createToUser(
toUserId: targetUserId,
text: 'Here is the file.',
fileId: driveFileId,
);
// Eine Nachricht loeschen
await client.chat.messages.delete(messageId: msg.id);
// Auf eine Nachricht reagieren
await client.chat.messages.react(messageId: msg.id, reaction: ':heart:');
// Eine Reaktion entfernen
await client.chat.messages.unreact(messageId: msg.id, reaction: ':heart:');
Nachrichtenverlaeufe
// Direktnachrichtenverlauf mit einem Benutzer (cursorbasierte Seitennavigation)
final messages = await client.chat.messages.userTimeline(
userId: targetUserId,
limit: 20,
);
// Aeltere Nachrichten abrufen
final older = await client.chat.messages.userTimeline(
userId: targetUserId,
limit: 20,
untilId: messages.last.id,
);
// Raumverlauf
final roomMessages = await client.chat.messages.roomTimeline(
roomId: roomId,
limit: 20,
);
Nachrichtensuche
final results = await client.chat.messages.search(
query: 'meeting',
limit: 20,
userId: targetUserId, // optional: auf ein Gespraech beschraenken
);
Chat-Raeume
// Einen Raum erstellen
final room = await client.chat.rooms.create(
name: 'Project Alpha',
description: 'Coordination channel',
);
// Raumdetails aktualisieren
await client.chat.rooms.update(
roomId: room.id,
name: 'Project Alpha — Active',
);
// Einen Raum loeschen
await client.chat.rooms.delete(roomId: room.id);
// Beitreten und verlassen
await client.chat.rooms.join(roomId: room.id);
await client.chat.rooms.leave(roomId: room.id);
// Raum stummschalten / Stummschaltung aufheben
await client.chat.rooms.setMute(roomId: room.id, mute: true);
// Mitgliederliste
final members = await client.chat.rooms.members(roomId: room.id, limit: 30);
// Eigene Raeume
final owned = await client.chat.rooms.owned(limit: 20);
// Beigetretene Raeume
final joined = await client.chat.rooms.joining(limit: 20);
Raumeinladungen
// Einen Benutzer in einen Raum einladen
await client.chat.rooms.invitationsCreate(
roomId: room.id,
userId: targetUserId,
);
// Erhaltene Einladungen auflisten
final inbox = await client.chat.rooms.invitationsInbox(limit: 20);
// Gesendete Einladungen fuer einen Raum auflisten
final outbox = await client.chat.rooms.invitationsOutbox(
roomId: room.id,
limit: 20,
);
// Eine erhaltene Einladung ablehnen
await client.chat.rooms.invitationsIgnore(roomId: room.id);
AnnouncementsApi
client.announcements ruft Serverankuendigungen ab. Authentifizierung ist optional;
bei Authentifizierung enthaelt jedes Element ein isRead-Flag.
// Aktive Ankuendigungen (Standard)
final active = await client.announcements.list(limit: 10);
// Inaktive Ankuendigungen ebenfalls einschliessen
final all = await client.announcements.list(isActive: false, limit: 20);
// Details zu einer einzelnen Ankuendigung
final ann = await client.announcements.show(announcementId: ann.id);
print(ann.title);
print(ann.text);
Seitennavigation mit sinceId, untilId, sinceDate und untilDate.
Als gelesen markieren
Eine Ankuendigung ueber client.account als gelesen markieren:
await client.account.readAnnouncement(announcementId: ann.id);
HashtagsApi
client.hashtags stellt Hashtag-Suche und Trendingdaten bereit. Keine Authentifizierung erforderlich.
Auflisten und suchen
// Hashtags sortiert nach Anzahl der Benutzer, die sie gepostet haben
final tags = await client.hashtags.list(
sort: '+mentionedUsers',
limit: 20,
);
// Praefixsuche — gibt eine Liste von Tag-Name-Zeichenfolgen zurueck
final suggestions = await client.hashtags.search(
query: 'miss',
limit: 10,
);
Verfuegbare sort-Werte: +mentionedUsers / -mentionedUsers,
+mentionedLocalUsers / -mentionedLocalUsers,
+mentionedRemoteUsers / -mentionedRemoteUsers,
+attachedUsers / -attachedUsers,
+attachedLocalUsers / -attachedLocalUsers,
+attachedRemoteUsers / -attachedRemoteUsers.
Tag-Details und Trends
// Detaillierte Statistiken fuer einen Tag
final tag = await client.hashtags.show(tag: 'misskey');
print(tag.mentionedUsersCount);
// Trending-Tags (bis zu 10, gecacht 60 s)
final trending = await client.hashtags.trend();
for (final t in trending) {
print('${t.tag}: ${t.chart}');
}
Benutzer fuer einen Tag
final users = await client.hashtags.users(
tag: 'misskey',
sort: '+follower',
limit: 20,
origin: 'local', // 'local', 'remote' oder 'combined'
state: 'alive', // 'all' oder 'alive'
);
InviteApi
client.invite verwaltet Einladungscodes auf einladungsbasierten Servern. Alle Endpunkte erfordern
Authentifizierung und die Rollenrichtlinie canInvite.
// Einen Einladungscode erstellen
final code = await client.invite.create();
print(code.code);
// Verbleibendes Kontingent pruefen (null bedeutet unbegrenzt)
final remaining = await client.invite.limit();
if (remaining != null) {
print('$remaining Einladung(en) verbleibend');
}
// Eigene ausgestellte Codes auflisten
final codes = await client.invite.list(limit: 20);
// Einen Code loeschen
await client.invite.delete(inviteId: code.id);
SwApi
client.sw verwaltet Service-Worker-Push-Benachrichtigungsabonnements. Alle Endpunkte erfordern Authentifizierung.
Registrieren
final registration = await client.sw.register(
endpoint: 'https://push.example.com/subscribe/abc123',
auth: 'auth-secret',
publickey: 'vapid-public-key',
);
print(registration.state); // 'subscribed' oder 'already-subscribed'
Uebergeben Sie sendReadMessage: true, um auch Lesestatus-Benachrichtigungen zu erhalten.
Registrierung pruefen
final sub = await client.sw.showRegistration(
endpoint: 'https://push.example.com/subscribe/abc123',
);
if (sub != null) {
print(sub.sendReadMessage);
}
Einstellungen aktualisieren
await client.sw.updateRegistration(
endpoint: 'https://push.example.com/subscribe/abc123',
sendReadMessage: false,
);
Registrierung aufheben
await client.sw.unregister(
endpoint: 'https://push.example.com/subscribe/abc123',
);