본문으로 건너뛰기

채널 및 안테나

채널은 노트가 해당 채널 내에서만 표시되는 주제별 공간입니다. 안테나는 설정한 조건에 맞는 노트를 자동으로 수집하는 커스텀 타임라인 필터입니다.

채널

client.channels API는 모든 채널 작업을 처리합니다. client.channels.mute 하위 API는 채널 뮤트를 관리합니다.

채널 생성 및 업데이트

final channel = await client.channels.create(
name: 'Tech Talk',
description: 'Discussions about software and technology.',
color: '#3498db',
);

// 업데이트 — 지정된 필드만 변경됨
await client.channels.update(
channelId: channel.id,
name: 'Tech Talk (v2)',
isArchived: false,
pinnedNoteIds: [noteId1, noteId2],
);

create의 선택적 필드: bannerId (드라이브 파일 ID), isSensitive, allowRenoteToExternal.

채널 타임라인

final notes = await client.channels.timeline(
channelId: channelId,
limit: 20,
);

// 이전 노트
final older = await client.channels.timeline(
channelId: channelId,
limit: 20,
untilId: notes.last.id,
);

모든 타임라인 메서드는 sinceId, sinceDate, untilDate도 지원합니다.

팔로우, 즐겨찾기 및 탐색

await client.channels.follow(channelId: channelId);
await client.channels.unfollow(channelId: channelId);

await client.channels.favorite(channelId: channelId);
await client.channels.unfavorite(channelId: channelId);

// 인증된 사용자가 즐겨찾기한 채널
final favorites = await client.channels.myFavorites();

// 탐색 목록
final featured = await client.channels.featured();
final followed = await client.channels.followed(limit: 20);
final owned = await client.channels.owned(limit: 20);

검색

// 이름과 설명 검색 (기본값)
final results = await client.channels.search(query: 'gaming', limit: 20);

// 이름만 검색
final results = await client.channels.search(
query: 'gaming',
type: 'nameOnly',
);

채널 뮤트

// 무기한 뮤트
await client.channels.mute.create(channelId: channelId);

// 만료 시간 지정 뮤트 (밀리초 단위 Unix 타임스탬프)
await client.channels.mute.create(
channelId: channelId,
expiresAt: DateTime.now()
.add(const Duration(days: 7))
.millisecondsSinceEpoch,
);

await client.channels.mute.delete(channelId: channelId);

final muted = await client.channels.mute.list();

안테나

안테나는 키워드, 사용자, 목록을 기반으로 서버 전체에서 노트를 자동으로 수집합니다.

안테나 생성

keywords는 외부 OR / 내부 AND 매칭을 사용합니다: 각 내부 목록은 AND 그룹이며, 외부 목록끼리는 OR로 결합됩니다.

final antenna = await client.antennas.create(
name: 'Dart news',
src: 'all', // 'home' | 'all' | 'users' | 'list' | 'users_blacklist'
keywords: [
['dart', 'flutter'], // "dart" AND "flutter" 둘 다 포함된 노트
['misskey'], // 또는 "misskey"가 포함된 노트
],
excludeKeywords: [['spam']],
users: [],
caseSensitive: false,
withReplies: false,
withFile: false,
);

사용자 목록으로 제한하려면 src: 'list'로 설정하고 userListId를 전달합니다.

안테나 노트 조회

final notes = await client.antennas.notes(antennaId: antenna.id, limit: 20);

// 페이지네이션
final older = await client.antennas.notes(
antennaId: antenna.id,
limit: 20,
untilId: notes.last.id,
);

목록 조회, 업데이트 및 삭제

final antennas = await client.antennas.list();
final detail = await client.antennas.show(antennaId: antennaId);

// antennaId만 필수이며, 다른 필드는 선택적으로 업데이트됩니다
await client.antennas.update(
antennaId: antennaId,
name: 'Dart & Flutter news',
excludeBots: true,
);

await client.antennas.delete(antennaId: antennaId);