Ana içeriğe geç

Arama

Mesaj araması, dizine eklenmiş mesajları bir metin sorgusu ve bir filtre kümesiyle eşleştirir. TEBHOS mesajları Elasticsearch'te dizinler. Üye araması Sunucu üyesi arama, sunucu araması ise Keşif sayfasında anlatılır.

İki yol vardır. Mesaj ara (POST /search/messages) kullanıcı oturumlarını ve bot token'larını kabul eder; tek bir kanalda, tek bir sunucuda veya çağıranın tüm sunucularında ve doğrudan mesajlarında arama yapabilir. Mesaj ara (sorgu dizesi) (GET /messages/search) ise yalnızca kullanıcılara açık, daha eski bir TEBHOS biçimidir.

Her sonuç, çağıranın okuyabildiği kanallarla sınırlıdır: bir sunucu kanalında çağıranın VIEW_CHANNEL ve READ_MESSAGE_HISTORY izinlerine sahip olması, bir özel kanalda ise alıcılardan biri olması gerekir. Gizli kanallardaki mesajlar sonuçlarda hiçbir zaman görünmez.

Mesaj ara

POST /search/messages

Dizine eklenmiş mesajlarda arama yapar ve bir genel arama sonucu nesnesi döndürür. Kullanıcı oturumlarını ve bot token'larını kabul eder; bot yalnızca current kapsamını kullanabilir.

Her isabet, döndürülmeden önce mesaj deposundan yeniden okunur. Mesajı artık mevcut olmayan bir isabet sayfadan çıkarılır ve dizinden silinir; bu nedenle bir sayfada hits_per_page değerinden daha az girdi bulunabilir.

JSON gövdesi

Alan Tür Açıklama
scope? string Arama kapsamı, varsayılan current
context_channel_id? snowflake current kapsamında: aranacak kanal. DM kapsamlarında: her zaman dahil edilen, çağırana ait bir DM
context_guild_id? snowflake current kapsamında: aranacak sunucu (context_channel_id alanına göre önceliklidir)
channel_ids? array[snowflake] En fazla 500. Aramayı bu kanallarla daraltır; her biri çağıran tarafından okunabilir olmalı (403 MISSING_PERMISSIONS) ve context_guild_id ile birlikte kullanıldığında o sunucuya ait olmalıdır
content? string Mesaj içeriği ve gömme metniyle eşleştirilen serbest metin sorgusu (1-1,024 karakter)
contents? array[string] En fazla 100 sorgu; herhangi biriyle eşleşen mesaj döndürülür (content yerine geçer)
exact_phrases? array[string] Tümü bitişik olarak geçmesi gereken en fazla 10 ifade
hits_per_page? integer 1-25, varsayılan 25
page? integer 1-400, varsayılan 1. cursor verildiğinde yok sayılır
cursor? array[string] 400. sayfanın ötesine geçmek için önceki sayfanın cursor değeri
max_id? / min_id? snowflake Yalnızca kimliği bu değerin altında / üstünde olan mesajlar
exclude_channel_id? array[snowflake] Dışarıda bırakılacak kanallar
author_id? / exclude_author_id? array[snowflake] Dahil edilecek / hariç tutulacak yazarlar (en fazla 100)
author_type? / exclude_author_type? array[string] user, bot veya webhook
mentions? array[snowflake] Tümünden bahsedilmesi gereken kullanıcılar
exclude_mentions? array[snowflake] Bahsedilmemesi gereken kullanıcılar
mention_everyone? boolean Mesajın @everyone bahsi içerip içermediği
pinned? boolean Mesajın sabitlenmiş olup olmadığı
has? / exclude_has? array[string] Tümü bulunması / bulunmaması gereken içerik türleri
embed_type? / exclude_embed_type? array[string] Gömme türleri: image, video, sound, article
embed_provider? / exclude_embed_provider? array[string] Gömme sağlayıcı adları
link_hostname? / exclude_link_hostname? array[string] Metindeki bağlantıların ana makine adları (küçük harfle karşılaştırılır)
attachment_filename? / exclude_attachment_filename? array[string] Tam ek dosya adları
attachment_extension? / exclude_attachment_extension? array[string] Nokta olmadan ek uzantıları
sort_by? string timestamp (varsayılan) veya relevance
sort_order? string desc (varsayılan) veya asc; timestamp için geçerlidir
include_nsfw? boolean Uyumluluk için kabul edilir. TEBHOS'ta yaş kısıtlamalı kanal olmadığından hiçbir şeyi değiştirmez

Snowflake değerleri dize veya sayı olarak gönderilebilir. Aynı listedeki filtrelerin tümü eşleşmelidir (mentions, has, embed_type, link_hostname, attachment_filename, attachment_extension); yalnızca author_id ve author_type listelenen değerlerden herhangi biriyle eşleşir.

Dizine eklenen filtreler

author_type, mention_everyone, has: snapshot, gömme filtreleri ve gömme metni eşleştirmesi, TEBHOS'un arama dizinine eklediği alanları okur. Bu alanlar var olmadan önce dizinlenmiş mesajlar bunlarla ancak yeniden dizinlemeden sonra eşleşir. has: poll hiçbir şeyle eşleşmez, çünkü anketler dizinlenmez.

Yanıt

Durum Gövde Koşul
200 genel arama sonucu nesnesi Arama tamamlandı; eşleşme olmayabilir
400 hata yanıtı INVALID_FORM_BODY Bir alan aralık dışında veya hatalı biçimde; errors[].code değeri CONTEXT_CHANNEL_OR_GUILD_ID_REQUIRED (bağlam olmadan current kapsamı), BOT_SEARCH_SCOPE_UNAVAILABLE (bir bot başka bir kapsam kullandı) veya ALL_CHANNELS_MUST_BELONG_TO_GUILD olur
403 hata yanıtı MISSING_PERMISSIONS: listelenen bir kanal okunamıyor. FORBIDDEN: bağlam kanalı görüntülenemiyor
404 hata yanıtı Bağlam kanalı mevcut değil veya görünmüyor (NOT_FOUND) ya da çağıran bağlam sunucusunun üyesi değil (UNKNOWN_GUILD)
503 hata yanıtı FEATURE_TEMPORARILY_DISABLED Örnek (instance) için yapılandırılmış bir arama altyapısı yok

Hız sınırı

search:messages kovasında (sorgu dizesi yoluyla paylaşılır) hesap başına 10 saniyede 20 istek.

Örnek

curl -X POST https://tebhos.com/api/v1/search/messages \
  -H "Authorization: Bot $TEBHOS_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"context_guild_id": "1489002177550843904", "content": "release notes", "has": ["link"], "hits_per_page": 10}'

Genel arama kapsamları

Değer Nerede aranır
current context_guild_id ile: o sunucunun okunabilir tüm kanalları (çağıran üye olmalıdır). Aksi hâlde context_channel_id kanalı; READ_MESSAGE_HISTORY olmadan yalnızca sunucunun geçmiş sınırından sonraki mesajlar döndürülür, sınır yoksa hiçbir şey döndürülmez
open_dms Çağıranın açık olan doğrudan ve grup doğrudan mesajları
all_dms Kapalı olanlar dahil, çağıranın tüm doğrudan ve grup doğrudan mesajları
all_guilds Çağıranın üyesi olduğu tüm sunucuların okunabilir tüm kanalları
all all_dms ve all_guilds birlikte
open_dms_and_all_guilds open_dms ve all_guilds birlikte

Genel arama sonucu nesnesi

Alan Tür Açıklama
messages array[mesaj nesnesi] Bu sayfadaki eşleşen mesajlar; referenced_message olmadan
channels array[kanal nesnesi] Döndürülen mesajların ait olduğu kanallar
total integer Eşleşen mesaj sayısı; bu sayfada çıkarılan bayat isabetler kadar azaltılır. READ_MESSAGE_HISTORY olmadan aranan bir kanal için döndürülen mesaj sayısıdır
hits_per_page integer Kullanılan sayfa boyutu
page integer Döndürülen sayfa
cursor? array[string] Sonraki sayfayı almak için cursor olarak geri gönderin; sayfa boşsa bulunmaz

Genel arama içerik türleri

Değer Açıklama
image Görsel eki var
video Video eki var
sound Ses eki var
file En az bir eki var
sticker En az bir çıkartması var
embed En az bir gömmesi var
link Metninde bağlantı var
snapshot İletilmiş bir mesaj
poll Anketi var (TEBHOS'ta hiçbir zaman eşleşmez)

Mesaj ara (sorgu dizesi)

GET /messages/search

Daha eski TEBHOS arama yolu. Yalnızca kullanıcılara açıktır: bot token'ı 403 ACCESS_DENIED ile reddedilir.

Dizine eklenmiş mesajlarda arama yapar ve bir mesaj arama sonucu nesnesi döndürür.

Her isabet, döndürülmeden önce mesaj deposundan yeniden okunur. Mesajı artık mevcut olmayan bir isabet sayfadan çıkarılır ve dizinden silinir; bu nedenle bir sayfada limit değerinden daha az girdi bulunabilir.

Sorgu parametreleri

Alan Tür Açıklama
q string Mesaj içeriği ve yazarın görünen adıyla eşleştirilen serbest metin sorgusu. Zorunludur, ancak her mesajla eşleşmesi için boş olabilir
channel_id? snowflake Aranacak kanal. server_id onsuz verilmedikçe zorunludur (bkz. arama kapsamları)
server_id? snowflake Aranacak sunucu
scope? string channel (varsayılan) veya server; bkz. arama kapsamları
limit? integer Sayfa başına sonuç (en fazla 50, varsayılan 25)
page? integer 1'den başlayan sayfa numarası (varsayılan 1)
author_id? snowflake Yalnızca bu kullanıcının mesajları
exclude_author_id? snowflake Bu kullanıcının mesajlarını hariç tutar
mentions? snowflake Yalnızca bu kullanıcıdan bahseden mesajlar
pinned? boolean true yalnızca sabitlenmiş mesajları döndürür
has? string Tümü bulunması gereken, virgülle ayrılmış içerik türleri
exclude_has? string Tümü bulunmaması gereken, virgülle ayrılmış içerik türleri
link? string Yalnızca tam olarak bu ana makine adına bağlantı içeren mesajlar (küçük harfle karşılaştırılır)
filename? string Yalnızca tam olarak bu dosya adına sahip bir eki olan mesajlar
ext? string Yalnızca bu uzantıya sahip bir eki olan mesajlar (nokta olmadan, küçük harfle karşılaştırılır)
before? string Yalnızca bu yerel günden (YYYY-MM-DD) önce oluşturulan mesajlar
after? string Yalnızca bu yerel günden (YYYY-MM-DD) sonra, yani ertesi günün başından itibaren oluşturulan mesajlar
during? string Yalnızca bu yerel günde (YYYY-MM-DD) oluşturulan mesajlar
tz_offset? integer İstemcinin dakika cinsinden saat dilimi farkı; JavaScript getTimezoneOffset() tarafından döndürüldüğü şekliyle (ör. UTC+3 için -180). Gün filtrelerini UTC sınırlarına çevirmek için kullanılır. -840..840 aralığına sıkıştırılır, varsayılan 0
sort? string Sıralama kipi (varsayılan newest)

before, after veya during içindeki geçersiz bir tarih 400 BAD_REQUEST döndürür.

Yanıt

Durum Gövde Koşul
200 mesaj arama sonucu nesnesi Arama tamamlandı; eşleşme olmayabilir
400 hata yanıtı Ne channel_id ne server_id verildi, q eksik ya da bir kimlik veya tarih hatalı biçimde (BAD_REQUEST)
403 hata yanıtı Çağıran bir bot (ACCESS_DENIED), sunucunun üyesi değil veya kanalı görüntüleyemiyor (FORBIDDEN)
404 hata yanıtı Kanal mevcut değil veya çağıran kanalı göremiyor (NOT_FOUND)
500 hata yanıtı Örnek için yapılandırılmış bir arama altyapısı yok

Hız sınırı

search:messages kovasında kullanıcı başına 10 saniyede 20 istek.

Örnek

curl -G "https://tebhos.com/api/v1/messages/search" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "q=release notes" \
  --data-urlencode "channel_id=1489002177550843905" \
  --data-urlencode "has=link,image" \
  --data-urlencode "sort=newest"

Arama kapsamları

Parametreler Nerede aranır
channel_id (kapsam belirtilmemiş veya channel) Yalnızca o kanal. Çağıranın VIEW_CHANNEL iznine ihtiyacı vardır. READ_MESSAGE_HISTORY olmadan yalnızca sunucunun mesaj geçmişi sınırından sonraki mesajlar döndürülür; sunucunun sınırı yoksa hiçbir şey döndürülmez
channel_id + scope=server + server_id Sunucunun, çağıranın hem VIEW_CHANNEL hem READ_MESSAGE_HISTORY iznine sahip olduğu tüm kanalları. Çağıran sunucunun üyesi olmalıdır. Tüm filtreler uygulanır
Yalnızca server_id Çağıranın okuyabildiği kanallarla sınırlı olarak sunucunun tamamı. Yalnızca q ve limit uygulanır; diğer filtreler ve page yok sayılır, yanıtta yalnızca items bulunur

Doğrudan mesaj ve grup doğrudan mesaj kanallarında channel_id ile arama yapılır; çağıran alıcılardan biri olmalıdır.

Mesaj arama sonucu nesnesi

Yapı

Alan Tür Açıklama
items array[mesaj nesnesi] Bu sayfadaki eşleşen mesajlar
total integer Eşleşen mesajların yaklaşık sayısı
page integer Döndürülen sayfa
total_pages integer ceil(total / limit); hiçbir şey eşleşmediyse 0
next_cursor ?string Dize olarak sonraki sayfa numarası; son sayfada null

total arama dizininden gelir ve geçerli sayfada çıkarılan bayat isabet sayısı kadar azaltılır; bu nedenle bir tahmindir. Sonuçlarda next_cursor null olana kadar page değerini artırarak sayfalayın.

Yalnızca server_id içeren biçim, sayfalama alanları olmadan {"items": [...]} döndürür.

Örnek

{
  "items": [],
  "total": 0,
  "page": 1,
  "total_pages": 0,
  "next_cursor": null
}

Arama içerik türleri

has ve exclude_has tarafından kabul edilen değerler. Bilinmeyen değerler yok sayılır.

Değer Açıklama
image Görsel eki var
video Video eki var
sound Ses eki var
file En az bir eki var
link Metninde bağlantı var
embed En az bir gömmesi var
sticker En az bir çıkartması var

Arama sıralama kipleri

Değer Açıklama
newest En yeni önce (oluşturulma zamanına, ardından mesaj kimliğine göre)
oldest En eski önce
relevance q boş değilse altyapının varsayılan sıralamasını kullanır. Dizin her zaman azalan mesaj kimliği sıralaması eklediğinden pratikte bu da en yeni önce demektir. q boşsa newest kipine geri döner