Chest MENU

#ページ機能を実装したGUI作り


#/guiコマンドでGUIを表示
command /gui:
trigger:
#変数「{page1}」にチェストを設定する
set {page1} to chest with 3 row named "GUI &cページ1"

#{page1}にアイテムを設置
set slot 0 of {page1} to apple
set slot 1 of {page1} to wooden sword

#ページ切り替えのための矢印設置
set slot 26 of {page1} to arrow named "&a次のページへ→"

#作成したページを表示
open {page1} to player

#GUIをクリックしてもアイテムを取れないようにする
on inventory click:
if name of player's current inventory is "GUI &cページ1":
cancel event

#もし矢がクリックされたら
if clicked slot is 26:
#{page2}を作成する
set {page2} to chest with 3 row named "GUI &bページ2"

set slot 0 of {page2} to diamond
set slot 1 of {page2} to golden hoe

#前のページに戻るための矢を設置する
set slot 18 of {page2} to arrow named "&a←前のページに戻る"

#現在のページを切り替える
close player's inventory
open {page2} to player

#page2のアイテムを取れなくする
if name of player's current inventory is "GUI &bページ2":
cancel event

#矢をクリックした場合
if clicked slot is 18:
#{page1}を開く

#変数「{page1}」にチェストを設定する
set {page1} to chest with 3 row named "GUI &cページ1"

#{page1}にアイテムを設置
set slot 0 of {page1} to apple
set slot 1 of {page1} to wooden sword

#ページ切り替えのための矢印設置
set slot 26 of {page1} to arrow named "&a次のページへ→"

#作成したページを表示
close player's inventory
open {page1} to player
#ページ機能を実装したGUI作り


#/guiコマンドでGUIを表示
command /gui:
trigger:
#変数「{page1}」にチェストを設定する
set {page1} to chest with 3 row named "GUI &cページ1"

#{page1}にアイテムを設置
set slot 0 of {page1} to apple
set slot 1 of {page1} to wooden sword

#ページ切り替えのための矢印設置
set slot 26 of {page1} to arrow named "&a次のページへ→"

#作成したページを表示
open {page1} to player

#GUIをクリックしてもアイテムを取れないようにする
on inventory click:
if name of player's current inventory is "GUI &cページ1":
cancel event

#もし矢がクリックされたら
if clicked slot is 26:
#{page2}を作成する
set {page2} to chest with 3 row named "GUI &bページ2"

set slot 0 of {page2} to diamond
set slot 1 of {page2} to golden hoe

#前のページに戻るための矢を設置する
set slot 18 of {page2} to arrow named "&a←前のページに戻る"

#現在のページを切り替える
close player's inventory
open {page2} to player

#page2のアイテムを取れなくする
if name of player's current inventory is "GUI &bページ2":
cancel event

#矢をクリックした場合
if clicked slot is 18:
#{page1}を開く

#変数「{page1}」にチェストを設定する
set {page1} to chest with 3 row named "GUI &cページ1"

#{page1}にアイテムを設置
set slot 0 of {page1} to apple
set slot 1 of {page1} to wooden sword

#ページ切り替えのための矢印設置
set slot 26 of {page1} to arrow named "&a次のページへ→"

#作成したページを表示
close player's inventory
open {page1} to player
YOUTUBEでこのコードが配布されていて試しに使ってみようと思ったんですが、動作してくれません。 今はこれは使えないんでしょうか?
78 Replies
§l§aKovachi
§l§aKovachiOP7mo ago
エラー
§l§aKovachi
§l§aKovachiOP7mo ago
バージョンは1.20.5です
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
動画のリンク頂けますか?
§l§aKovachi
§l§aKovachiOP7mo ago
Tsubasa
YouTube
【skript解説】GUIにページ機能を実装してみよう!
ご視聴ありがとうございます!今回は、コメント欄で来ていた質問にお応えして、skriptでページ機能がついたGUIのskriptを作成してみました~ ▼今回紹介した構文 https://github.com/Tsubasa9602/Tsubasa-Skripts/blob/main/%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88GUI.sk #minecraft #skript #GUI
§l§aKovachi
§l§aKovachiOP7mo ago
です!
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
このコード以外のコードってエラーなく動いてますか?
§l§aKovachi
§l§aKovachiOP7mo ago
一応動いてますね とりあえず調べて簡単にまとめたんですが、
on rightclick on chest:
send "Hello World!" to player
cancel event
open chest with 6 row named "Shop" to player
on rightclick on chest:
send "Hello World!" to player
cancel event
open chest with 6 row named "Shop" to player
これはどこかおかしいですか? 最後の行が理解できないといわれます
on rightclick on chest:
send "§4これは人のチェストです" to player
cancel event
open chest to player
set slot 0 of player's current inventory to apple named "§l§cメインメニュー"

on inventory click:
cancel event
if name of clicked item is "§l§cメインメニュー":
command "/tp %player% 0 100 0"
on rightclick on chest:
send "§4これは人のチェストです" to player
cancel event
open chest to player
set slot 0 of player's current inventory to apple named "§l§cメインメニュー"

on inventory click:
cancel event
if name of clicked item is "§l§cメインメニュー":
command "/tp %player% 0 100 0"
ここまで書いてみたんですが、チェストにリンゴを召喚して取れないようにするところまではできてるのですが、
if name of clicked item is "§l§cメインメニュー":
if name of clicked item is "§l§cメインメニュー":
ここでエラー吐いてます 先程の場所とここでエラー吐いてますね
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
Can't understand〜っていうエラーですか? clicked itemはevent-itemに変えてみてください こちらについてはとあるバージョンから書式が少し変更されているので、open chest inventory 〜に変えてみてください
§l§aKovachi
§l§aKovachiOP7mo ago
おお!!!ありがとうございます!!! これはプラグインの入れ忘れでした(((( 多分バグっている理由がバージョンのせいだと思うんですが、 新しいバージョンのワールドデータを古いバージョンに持ってくる方法はありませんかね? もしくは、 SkQueryの代わりになるアドオンありませんか 1.20.4以降でも使えるもの、、、、
on rightclick on chest:
send "§4これは人のチェストです" to player
cancel event
open chest inventory 1 row named "Shop" to player
set slot 0 of player's current inventory to apple named "メインメニュー"

on inventory click:
if display name of player’s current inventory contains "Shop":
cancel event
if name of event-item is "メインメニュー":
execute console command "/tp %player% 0 100 0"
on rightclick on chest:
send "§4これは人のチェストです" to player
cancel event
open chest inventory 1 row named "Shop" to player
set slot 0 of player's current inventory to apple named "メインメニュー"

on inventory click:
if display name of player’s current inventory contains "Shop":
cancel event
if name of event-item is "メインメニュー":
execute console command "/tp %player% 0 100 0"
このコードで
§l§aKovachi
§l§aKovachiOP7mo ago
11行目のエラーは気にしないでください 8行目
if display name of player’s current inventory contains "Shop":
if display name of player’s current inventory contains "Shop":
の部分、Shopという名前以外ではアイテムをつかめるようにしたいのですが、ifできません
No description
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
そのイベント内でインベントリを取得する時はplayer's current inventoryではなくevent-inventoryを使うと良いです
if name of event-inventory contains "Shop":
if name of event-inventory contains "Shop":
§l§aKovachi
§l§aKovachiOP7mo ago
ありがとうございます!やってみます! だめです(((( エラーは出ませんが、インベントリのアイテムがつかめなくなってしまってます 指定チェストだけで売他したいです うごかしたいです
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
インデントミスってたりしませんか 構文自体に誤りは無いと思います
§l§aKovachi
§l§aKovachiOP7mo ago
やっぱりその答えに行き着きますよね(((( そなるとversionを疑うしか((
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
これ見る限りcancel eventのインデントミスってるようですが直されてますか?
§l§aKovachi
§l§aKovachiOP7mo ago
キャンセルイベントのインデント....? え、どうみすってます? 11行目のコマンドの部分のエラーは直してるので、 8行目だけを治したい感じですね 開いたチェストの名前が Shopだった時のみ、 キャンセルイベントをしたいです
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
on inventory clickイベント内のcancel eventの行 Tab1つ足りなくないですかね スマホの表示がおかしいだけなのかな
§l§aKovachi
§l§aKovachiOP7mo ago
あぁー、どうでしたっけ..... バイト終わったら確認してみます いけました!!! 空白ですらバグの原因なんですか....!?!? 難しい.....
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
文末がコロンで終わる構文は、他の行のコードに何らかの影響を及ぼします しかしその範囲が決まっています 構文が書かれている行のインデント数をnとすると、 ①その構文が書かれている行より下である ②インデント数がn+1以上 ③範囲の最後は、次にインデント数がn以下である行の1行上まで
if 〜:
 影響あり
 影響あり

 影響あり
(コード)
影響なし
if 〜:
 影響あり
 影響あり

 影響あり
(コード)
影響なし
§l§aKovachi
§l§aKovachiOP7mo ago
めっちゃわかりやすい、、、、!! なるほど、いわばJSでいう{}ってことですね あ、それと、 次のことを作りたくて、 JAVAってアイテムをチェストではなく ゲームで言う仮想インベントリ(倉庫)的なのを作れたりするんですか?
nennneko5787
nennneko57877mo ago
on inventory close でチェストの中身をのアイテムをループして保存すればいける 語彙力が終わってる
§l§aKovachi
§l§aKovachiOP7mo ago
アイテムをループして保存すれば行ける......?? クローズってことはチェスト閉じさせるんすか?
nennneko5787
nennneko57877mo ago
そのクローズはEffectではなくon inventory closeイベントです 紛らわしくてすみません
§l§aKovachi
§l§aKovachiOP7mo ago
あ、なるほど!! いや、理解能力がなくてすみません 保存って統合版だとなかったんですけど、なんか、保存できる何かがあるんです?
nennneko5787
nennneko57877mo ago
アイテムは変数に保存できます
§l§aKovachi
§l§aKovachiOP7mo ago
まじですか!? それは、エンチャついてても保存可能なんです?
nennneko5787
nennneko57877mo ago
もちろんです
§l§aKovachi
§l§aKovachiOP7mo ago
優秀だ、、、、 そういうのの書き方が書いてあるサイトとかってあるんすか?
nennneko5787
nennneko57877mo ago
調べれば色々と出てくるんですが古い情報しか載ってないので
§l§aKovachi
§l§aKovachiOP7mo ago
書き方が分からないので参考にしないとデキナイッス(((
nennneko5787
nennneko57877mo ago
僕が書きます
§l§aKovachi
§l§aKovachiOP7mo ago
!?!?!? あなたは神様ですか
nennneko5787
nennneko57877mo ago
明日か明後日ぐらいでいいですか?
§l§aKovachi
§l§aKovachiOP7mo ago
全然大丈夫です!!!助かります!! では先に別のをやっておきます
command /aaaa:
trigger:
send "aaaaaaa" to player
command /aaaa:
trigger:
send "aaaaaaa" to player
試しにコマンドを作ってみようと思ってやってみたんですが、書き方間違っているでしょうか? コマンド実行しても動いてくれないです カスタムコマンドって最新バージョンだとできない感じですかね、、、?
nennneko5787
nennneko57877mo ago
うーん、コードはあってそうです コンソールとかにエラーは出てませんか?
§l§aKovachi
§l§aKovachiOP7mo ago
エラー Line 1: A command with the name /diamond is already defined in study\part1.sk Line command /diamond 別ので試したらエラー出ました
command /diamond:
trigger:
send "diamond" to player
command /diamond:
trigger:
send "diamond" to player
nennneko5787
nennneko57877mo ago
同じ名前のコマンドを複数定義することはできません
§l§aKovachi
§l§aKovachiOP7mo ago
ええ、、、これだけなんすけど、、、、 何を検知してるんだろう、、、
nennneko5787
nennneko57877mo ago
もしかして: 別のファイル study/part1.sk ファイルが
§l§aKovachi
§l§aKovachiOP7mo ago
作ってるのは3つしかなくて((((
on join:
set the join message to "Hello World!"

#on place:
# cancel event

on break:
cancel event

on Drop:
cancel event
on join:
set the join message to "Hello World!"

#on place:
# cancel event

on break:
cancel event

on Drop:
cancel event
part1の中身です
nennneko5787
nennneko57877mo ago
sk reload scripts コマンドを実行してみてください
§l§aKovachi
§l§aKovachiOP7mo ago
了解です
§l§aKovachi
§l§aKovachiOP7mo ago
全体リロードするとこんなエラーが、、、
No description
§l§aKovachi
§l§aKovachiOP7mo ago
commandが入ってるファイルだけreloadかけても駄目でした
nennneko5787
nennneko57877mo ago
コンソールにどんなerrorがでてますか
§l§aKovachi
§l§aKovachiOP7mo ago
です 量が多いのでファイル形式で、、
nennneko5787
nennneko57877mo ago
Skriptとアドオン(いれてるなら)のバージョンって覚えてますか?
§l§aKovachi
§l§aKovachiOP7mo ago
あぁー、、、入れれる最新だったと思います
nennneko5787
nennneko57877mo ago
最新だと本当に最新かわからないので とりあえずplコマンドの結果見せてください
§l§aKovachi
§l§aKovachiOP7mo ago
plだとバージョン出なかったです、、 [22:25:58 INFO]: Server Plugins (6): [22:25:58 INFO]: Bukkit Plugins: [22:25:58 INFO]: - DiscordSRV, MiniMOTD, SkQuery, skRayFall, Skript, WelcomeTitlePlugin
§l§aKovachi
§l§aKovachiOP7mo ago
No description
§l§aKovachi
§l§aKovachiOP7mo ago
もうversion昔のでやるしかなさそうですね((( 1.19.4でサーバー開いたんですけど、 /skript reloadって使えないんです? 1.20.5だと使えたんですが
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
それ使えないのは Skriptのバージョンがサーバーのバージョンと合ってない可能性が高いです
§l§aKovachi
§l§aKovachiOP7mo ago
なるほど。。。。!! ただ、VSCODEの方では使えるのでこのままでいいかな、、、、 武器にloreを設定して、その数値を取得して、ダメージに加算、とかってできるんすか?
nennneko5787
nennneko57877mo ago
それやるならnbtのほうがいいですよ
tanoKun
tanoKun7mo ago
datacontiner使おう
§l§aKovachi
§l§aKovachiOP7mo ago
NBT.....どうやっていじるんだろう..... 調べてみます これすか???
§l§aKovachi
§l§aKovachiOP7mo ago
これは、Skriptの1部じゃなくて、また別のプラグイン?って感じです? あと、念のため最初にやりたいことだけ書いておきます。 武器にlore設定するのは変わらないんですが、 プレイヤーのステータスを作りたくて、 例えば、str(力の強さ)が10で、ダメージ計算がstr3で1とすると、敵に3ダメージ与えれる、 ただ、敵の防御力が2だとしたら、1しか与えられない、 その人のダメージには武器のloreの数値が加算されるため、 武器の攻撃力が5であれば。 8ダメージ与えれるが防御力を加味したら6ダメージ与えれる というのを 統合版ではscoreを使って作ってたんですが、 JAVAだとそういう事もNBTでできる感じですか? それともそれらはまた別です?
tanoKun
tanoKun7mo ago
いや Bukkitの機能でskriptにもあると思います skripthub data container とかで調べてみれば詳しいことかかれてるかもです
§l§aKovachi
§l§aKovachiOP7mo ago
ありがとうございます!! 調べてみます!!
§l§aKovachi
§l§aKovachiOP7mo ago
https://forums.skunity.com/threads/player-nbt-data-storage.12837/ これくらいしか出てこなかったです
skUnity Forums
Player NBT Data Storage
Often times you may notice you have a ton of variables for players. After a lot of players join your server you will notice your variable file growing and growing. One main issue here is that a lot of the players who join your server, may possible join once and never return. This ends up...
のしぇあ
のしぇあ7mo ago
SkBeeのNbt周りの構文は個人的なオススメです
§l§aKovachi
§l§aKovachiOP7mo ago
おお!ではそれ入れてみます!! とりあえずNBTはこれ触ったうえで分からなかったら聞きます(多分全くわかりませんが) その前に、
set slot 0 of {page1} to gray stained glass pane
set slot 1 of {page1} to gray stained glass pane
set slot 2 of {page1} to gray stained glass pane
set slot 3 of {page1} to gray stained glass pane
set slot 4 of {page1} to gray stained glass pane
set slot 5 of {page1} to gray stained glass pane
set slot 6 of {page1} to gray stained glass pane
set slot 7 of {page1} to gray stained glass pane
set slot 8 of {page1} to gray stained glass pane
set slot 45 of {page1} to gray stained glass pane
set slot 46 of {page1} to gray stained glass pane
set slot 47 of {page1} to gray stained glass pane
set slot 48 of {page1} to gray stained glass pane
set slot 49 of {page1} to gray stained glass pane
set slot 50 of {page1} to gray stained glass pane
set slot 51 of {page1} to gray stained glass pane
set slot 52 of {page1} to gray stained glass pane
set slot 0 of {page1} to gray stained glass pane
set slot 1 of {page1} to gray stained glass pane
set slot 2 of {page1} to gray stained glass pane
set slot 3 of {page1} to gray stained glass pane
set slot 4 of {page1} to gray stained glass pane
set slot 5 of {page1} to gray stained glass pane
set slot 6 of {page1} to gray stained glass pane
set slot 7 of {page1} to gray stained glass pane
set slot 8 of {page1} to gray stained glass pane
set slot 45 of {page1} to gray stained glass pane
set slot 46 of {page1} to gray stained glass pane
set slot 47 of {page1} to gray stained glass pane
set slot 48 of {page1} to gray stained glass pane
set slot 49 of {page1} to gray stained glass pane
set slot 50 of {page1} to gray stained glass pane
set slot 51 of {page1} to gray stained glass pane
set slot 52 of {page1} to gray stained glass pane
このコードを簡単に書くものって何かないですか?
nennneko5787
nennneko57877mo ago
loop
§l§aKovachi
§l§aKovachiOP7mo ago
loop slot from 0 to 8 loop slot from 45 to 52 みたいな感じです?
nennneko5787
nennneko57877mo ago
loop 9 times: set slot (loop-number - 1) of player's current inventory to ~~~ って感じ
§l§aKovachi
§l§aKovachiOP7mo ago
全然違った、、、、、、 ありです!!!! SkBeeって1.19.4でも問題なく色々使えます? なんか1.19だと対応数が少ないって聞いたんですが、
loop 53 times:
if loop-number > 45:
set slot (loop-number - 1) of {page1} to gray stained glass pane
loop 53 times:
if loop-number > 45:
set slot (loop-number - 1) of {page1} to gray stained glass pane
45~52のスロットだけ埋めたい場合ってどうすればいいんですか? こうかなって思ってやったんですけどダメで、 loop-numberって指定した53から一個ずつ減っていくって感じではないです?
nennneko5787
nennneko57877mo ago
45から52ならこんな感じ loop 7 times: set slot (45 + (loop-number - 1)) of player's current inventory to ~~~ 1.19なら全然サポート対象内
§l§aKovachi
§l§aKovachiOP7mo ago
まじですか!?!? あ、なるほど、そういう事ですか、、w ありです!!! lore、村人取引内容、この辺りはじゃあいけそうな感じなんすね それと、プレイヤーに数値を付与する場合ってLVなどはscoreではなくNBTってやつで行けたりするんです?
nennneko5787
nennneko57877mo ago
なんのLVによるか 独自のパラメータならNBT プレイヤーのレベルだったら player's level と player's level progress でいける 武器のレベルは知らん
§l§aKovachi
§l§aKovachiOP7mo ago
多分誰でも知ってるもので例えると、 ポケモンなどのLvと同じで大丈夫です!! あと、出来れば ポケモンでまた例えると 種族値的なのも設定したいです。 攻撃力、防御力、魔法攻撃力、なども これらもNBTが楽ですか?? 武器のLvは特に.... ただ、武器のloreは書き換えれるものがあるなら望ましいですね ただ、NBTじゃなくても、 漁ってたら見つけたコードで、
on death:
if attacker is a player:
if {lv.%attacker%} is not set:
set {lv.%attacker%} to 0
set {xp.%attacker%} to 0
set {needxp.%attacker%} to 10
if victim is not animal:
if victim is armor stand:
set {_xp.%attacker%} to -114514
else:
set {_xp.%attacker%} to a random integer between 3 and 5
else:
set {_xp.%attacker%} to a random integer between 1 and 3
message "&6%victim% &7を討伐!" to attacker
message "- &6%{_xp.%attacker%}%&7 xp獲得しました" to attacker
set {xp.%attacker%} to {xp.%attacker%} + {_xp.%attacker%}
if {needxp.%attacker%} < {xp.%attacker%} + 1:
add 1 to {lv.%attacker%}
message "----------" to attacker
message "&e&lLvup! &7Lv.&6%{lv.%attacker%}%" to attacker
message "----------" to attacker
set {xp.%attacker%} to {xp.%attacker%} - {needxp.%attacker%}
set {_needxpa.%attacker%} to {needxp.%attacker%} * 1.1
set {_needxpb.%attacker%} to {lv.%attacker%} * 5
set {needxp.%attacker%} to {_needxpa.%attacker%} + {_needxpb.%attacker%}
set {needxp.%attacker%} to round({needxp.%attacker%})
play sound "entity.firework.twinkle" with volume 0.5 and pitch 1 at attacker

command /status:
trigger:
message "--------------------"
message "Lv : &6%{lv.%player%}%" to player
message "xp : &6%{xp.%player%}%" to player
message "必用xp : &6%{needxp.%player%} - {xp.%player%}%" to player
message "基準xp : &6%{needxp.%player%}%" to player
message "--------------------"

command /lvreset:
trigger:
set {lv.%player%} to 0
set {xp.%player%} to 0
set {needxp.%player%} to 10
execute player command "/status"
on death:
if attacker is a player:
if {lv.%attacker%} is not set:
set {lv.%attacker%} to 0
set {xp.%attacker%} to 0
set {needxp.%attacker%} to 10
if victim is not animal:
if victim is armor stand:
set {_xp.%attacker%} to -114514
else:
set {_xp.%attacker%} to a random integer between 3 and 5
else:
set {_xp.%attacker%} to a random integer between 1 and 3
message "&6%victim% &7を討伐!" to attacker
message "- &6%{_xp.%attacker%}%&7 xp獲得しました" to attacker
set {xp.%attacker%} to {xp.%attacker%} + {_xp.%attacker%}
if {needxp.%attacker%} < {xp.%attacker%} + 1:
add 1 to {lv.%attacker%}
message "----------" to attacker
message "&e&lLvup! &7Lv.&6%{lv.%attacker%}%" to attacker
message "----------" to attacker
set {xp.%attacker%} to {xp.%attacker%} - {needxp.%attacker%}
set {_needxpa.%attacker%} to {needxp.%attacker%} * 1.1
set {_needxpb.%attacker%} to {lv.%attacker%} * 5
set {needxp.%attacker%} to {_needxpa.%attacker%} + {_needxpb.%attacker%}
set {needxp.%attacker%} to round({needxp.%attacker%})
play sound "entity.firework.twinkle" with volume 0.5 and pitch 1 at attacker

command /status:
trigger:
message "--------------------"
message "Lv : &6%{lv.%player%}%" to player
message "xp : &6%{xp.%player%}%" to player
message "必用xp : &6%{needxp.%player%} - {xp.%player%}%" to player
message "基準xp : &6%{needxp.%player%}%" to player
message "--------------------"

command /lvreset:
trigger:
set {lv.%player%} to 0
set {xp.%player%} to 0
set {needxp.%player%} to 10
execute player command "/status"
適当に漁ってたらこういうレベル概念のものがあって、 ワールド閉じて開いてもレベルとかが保持されたままあるやつだったので NBT使う利点とこれを使う利点、どっちの方がいいのか っていうのがあります
nennneko5787
nennneko57877mo ago
結局どっちがいいの プレイヤーのステータス か 武器のステータス
§l§aKovachi
§l§aKovachiOP7mo ago
プレイヤーでお願いします
Melonium
Melonium7mo ago
関係はないけどnamed " "ってやったほうがスタイリッシュ
複数人
複数人6mo ago
追記 最近のskriptは head系統とか一部がskript自体のバグで動かない模様
Want results from more Discord servers?
Add your server