New Crowdin updates (#7489)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations create-plugin.md (French)

* New translations create-plugin.md (French)

* New translations create-plugin.md (French)

* New translations create-plugin.md (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations create-plugin.md (French)

* New translations create-plugin.md (French)

* New translations create-plugin.md (French)

* New translations create-plugin.md (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations stream.md (French)

* New translations reversi-bot.md (French)

* New translations ja-JP.yml (English)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (French)

* New translations reversi-bot.md (French)

* New translations reversi-bot.md (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations stream.md (French)

* New translations stream.md (French)

* New translations ja-JP.yml (French)

* New translations stream.md (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations theme.md (Italian)

* New translations theme.md (French)

* New translations theme.md (English)

* New translations theme.md (Italian)

* New translations theme.md (Italian)

* New translations theme.md (Italian)

* New translations ja-JP.yml (Chinese Simplified)

* New translations deck.md (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (French)

* New translations theme.md (French)

* New translations theme.md (French)

* New translations deck.md (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations aiscript.md (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (French)
This commit is contained in:
syuilo
2021-05-04 22:52:02 +09:00
committed by GitHub
parent 94ac0a7797
commit 1157df1407
21 changed files with 364 additions and 238 deletions

View File

@@ -1,33 +1,33 @@
# MisskeyリバーシBotの開発
Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
# Développement du bot Reversi de Misskey
Cette page explique comment développer un bot pour la fonction Reversi de Misskey.
1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
1. Connectez-vous au flux `games/reversi` avec les paramètres suivants :
* `i` : Clé API pour le compte du bot
2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
* イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
2. Lorsqu'une invitation à un jeu arrive, un événement `invited` sera lancé à partir du flux.
* Le contenu de cet événement est un attribut `parent`, qui contient des informations sur l'utilisateur qui a envoyé l'invitation.
3. `games/reversi/match`へ、`user_id`として`parent``id`が含まれたリクエストを送信する
3. Envoie une requête à `games/reversi/match`, où la valeur du paramètre `user_id` est l'attribut `id` de l'objet `parent` obtenu précédemment.
4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
* `game`: `game``id`
4. Si la requête fonctionne, les informations sur le jeu seront renvoyées et vous pourrez vous connecter au flux `games/reversi-game` avec les paramètres suivants :
* `i` : Clé API pour le compte du bot
* `game`: `game` de `id`
5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
5. Pendant ce temps, l'adversaire peut modifier les paramètres du jeu. Chaque fois qu'un paramètre est modifié, le flux envoie un événement `update-settings`, donc une logique pour gérer ces événements peut être nécessaire.
6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
6. Une fois que vous êtes satisfait·e des paramètres du jeu, envoyez le message `{ type : 'accept' }` au flux.
7. ゲームが開始すると、`started`イベントが流れてくる
* イベントの中身にはゲーム情報が含まれている
7. Lorsque le jeu commence, l'événement `started` sera envoyé.
* Les informations sur l'état du jeu seront inclus dans cet événement.
8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
8. Pour placer une pierre, envoyez `{ type : 'set', pos : <Position&gt ; }` au flux (voir ci-dessous pour savoir comment calculer la position).
9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
* `color`として石の色が含まれている
* `pos`として位置情報が含まれている
9. Lorsque votre adversaire ou vous-même placez une pierre, un événement `set` est envoyé depuis le flux.
* `color` contient la couleur de la pierre placée
* `pos` contient la position de la pierre
## 位置の計算法
8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
## Calculer la position
Si nous considérons une carte 8x8, la position de chaque carré (appelée index) est la suivante :
```
+--+--+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5| 6| 7|
@@ -38,29 +38,29 @@ Misskeyのリバーシ機能に対応したBotの開発方法をここに記し
...
```
### X,Y座標 から インデックス に変換する
### Trouver les index à partir des coordonnées X, Y
```
pos = x + (y * mapWidth)
```
`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
`mapWidth` est une donnée de la carte prise sur la `map` comme suit :
```
mapWidth = map[0].length
```
### インデックス から X,Y座標 に変換する
### Trouver les coordonnées X, Y depuis l'index
```
x = pos % mapWidth
y = Math.floor(pos / mapWidth)
```
## マップ情報
マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
* `(スペース)` ... マス無し
* `-` ... マス
* `b` ... 初期配置される黒石
* `w` ... 初期配置される白石
## Information sur la carte
Les données de la carte sont incluses dans `map` dans les données du jeu. Comme les données sont représentées sous la forme d'un tableau de chaînes de caractères, chaque caractère représente un champ. Sur la base de ces données, vous pouvez reconstruire l'état de la carte :
* `(Vide)` ... Aucun champ
* `-` ... Champ
* `b` ... La première pierre placée est noire
* `w` ... La première pierre placée est blanche
例えば、4*4の次のような単純なマップがあるとします:
Par exemple, supposons que nous ayons la carte simple suivante de 4×4 :
```text
+---+---+---+---+
| | | | |
@@ -73,23 +73,23 @@ y = Math.floor(pos / mapWidth)
+---+---+---+---+
```
この場合、マップデータはこのようになります:
Dans ce cas, les données de la carte ressembleront à ceci :
```javascript
['----', '-wb-', '-bw-', '----']
```
## ユーザーにフォームを提示して対話可能Botを作成する
ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
## Créer un Bot interactif en présentant un formulaire à l'utilisateur.
Afin de communiquer avec l'utilisateur, un formulaire peut être présenté à l'utilisateur sur l'écran des paramètres du jeu. Par exemple, un scénario pourrait consister à permettre à l'utilisateur de définir la force du bot.
フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
Pour présenter le formulaire, envoyez le message suivant au flux `reversi-game` :
```javascript
{
type: 'init-form',
body: [フォームコントロールの配列]
body: [Tableau de contrôles de formulaires]
}
```
フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
Nous allons maintenant expliquer le tableau des contrôles de formulaires. Un contrôle de formulaire est un objet qui ressemble à ce qui suit :
```javascript
{
id: 'switch1',
@@ -98,10 +98,10 @@ y = Math.floor(pos / mapWidth)
value: false
}
```
`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
`id` ... ID de l'élément de contrôle. `type` ... Le type d'élément de contrôle. Nous y reviendrons plus tard. Texte affiché à côté de l'élément de contrôle. `value` ... La valeur par défaut de l'élément de contrôle.
### フォームの操作を受け取る
ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
### Gestion des interactions avec les formulaires
Lorsqu'un utilisateur interagit avec le formulaire, un événement `update-form` est envoyé par le flux. Le contenu de l'événement contient l'ID du contrôle et la valeur définie par l'utilisateur. Par exemple, si l'utilisateur allume l'interrupteur illustré ci-dessus, l'événement suivant sera diffusé :
```javascript
{
id: 'switch1',
@@ -109,52 +109,52 @@ y = Math.floor(pos / mapWidth)
}
```
### フォームコントロールの種類
### Types d'éléments de contrôles de formulaires
#### Interrupteur
type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
type: `switch` Affiche un interrupteur.Cette fonction est utile lorsque vous souhaitez activer ou désactiver une fonction.
##### プロパティ
`label` ... スイッチに表記するテキスト。
##### Propriétés
`label` ... Texte à marquer sur l'interrupteur.
#### ラジオボタン
type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
#### Boutons radio
type: `radio` Affiche le bouton radio.Il est utile pour proposer des options.Par exemple, pour choisir la difficulté du bot.
##### プロパティ
`items` ... ラジオボタンの選択肢。例:
##### Propriétés
`items` ... Les options des boutons radio. Par exemple :
```javascript
items: [{
label: '',
label: 'Facile',
value: 1
}, {
label: '',
label: 'Moyen',
value: 2
}, {
label: '',
label: 'Difficile',
value: 3
}]
```
#### スライダー
type: `slider` スライダーを表示します。
#### Glissière
type: `slider` Affiche une glissière.
##### プロパティ
`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
##### Propriétés
`min` ... Limite minimum de la glissière. `max` ... Limite maximum de la glissière. `step` ... Étapes entre les valeurs de la glissière.
#### テキストボックス
type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
#### Zones de texte
type: `textbox` Affiche une zone de texte.Cette fonction peut être utilisée à des fins générales lorsque vous souhaitez que l'utilisateur tape quelque chose.
## ユーザーにメッセージを表示する
設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
## Afficher un message à l'utilisateur
C'est un autre moyen, autre que les formulaires, d'interagir avec les utilisateurs dans l'écran de configuration.Vous pouvez afficher un message à l'intention de l'utilisateur. Par exemple, vous pouvez afficher un avertissement lorsque l'utilisateur sélectionne un mode ou une carte qui n'est pas pris en charge par le Bot. Pour afficher un message, envoyez le message suivant au flux :
```javascript
{
type: 'message',
body: {
text: 'メッセージ内容',
type: 'メッセージの種類'
text: 'contenu du message',
type: 'Type du message'
}
}
```
メッセージの種類: `success`, `info`, `warning`, `error`
Type de message : `success`, `info`, `warning`, `error`.
## 投了する
投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
## Abandonner
Pour se rendre, faites une demande à <a href="./api/endpoints/games/reversi/games/surrender">cette terminaison</a>.