2024-12-18 06:28:35

This commit is contained in:
Keisuke Hirata 2024-12-18 06:28:35 +09:00
parent 6cd6a02396
commit 5ccf97cdfe
7 changed files with 55 additions and 16 deletions

View File

@ -0,0 +1,8 @@
---
title:
tags: []
image: /uploads/
publish: public hidden
---
<script>
</script>

View File

@ -0,0 +1,46 @@
---
title: Discord.js v14でコマンド登録
tags:
- DiscordBot
- Discord
- Typescript
- NodeJS
image: /uploads/
publish: public
---
<script>
</script>
# Dicord.jsを活用しよう
かんたんなBotの作り方は色々乗ってますが、どんな機能をどういうふうに使えるのかをシンプルに一覧できたらいいなと思ったので備忘がてら書き残します。
この記事はdiscord.js 14 + typescriptの環境をターゲットにしています。
また、バージョンは、執筆時点で最新版の14.16.3をもとにしています。
## Overview
- 基本的な仕組み
- メッセージと埋め込み
- RESTクラスとpu
- スラッシュコマンドの実装
- コンテクストメニューの実装
# 基本的な仕組み
かつては、一般メッセージの文頭が特定のprefixならコマンドとみなすような原始的な実装がされていました。これは、全てのメッセージを読み取る必要があり、様々な問題がありました。
これがいつからかDiscordは、スラッシュコマンド等のボットに対するリクエスト方法を公式に用意して、そのリクエストをbotがハンドリングするような形になりました。
## 例)コマンドの登録
```ts
import { REST, Routes, } from "discord.js"
const rest = new REST({ version: "10" }).setToken(TOKEN);
try {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: [{
name: "ping",
description: "Send Ping!",
}]
});
} catch (error) {
console.error(error);
}
```
TOKENとCLIENT_IDは与えてください。
これにより、ボットが導入されたサーバーで`/`を入力すると、補完のリストに登録されたものが見えます。
これらは、Botが起動していなくても利用できます。

View File

@ -6,11 +6,7 @@ tags:
image: /uploads/ image: /uploads/
publish: public publish: public
--- ---
<script>
</script>
# Gitで利用するキーをコマンドで指定する # Gitで利用するキーをコマンドで指定する
---
gitに使うキーは`~/.ssh/config`でホストを指定して設定していることでしょう。 gitに使うキーは`~/.ssh/config`でホストを指定して設定していることでしょう。
ですが、リポジトリのデプロイキーを使いたい場合等、一時的にキーを変えたいシーンがあります。 ですが、リポジトリのデプロイキーを使いたい場合等、一時的にキーを変えたいシーンがあります。
結論からいうと、 結論からいうと、
@ -22,6 +18,5 @@ gitの`-c`オプションはgit configで設定するような内容をその場
`-i`ではキーを指定、`-F`で既存のコンフィグファイルを利用しないようにしています。 `-i`ではキーを指定、`-F`で既存のコンフィグファイルを利用しないようにしています。
# 参考文献 # 参考文献
---
- https://git-scm.com/docs/git - https://git-scm.com/docs/git
- https://man.archlinux.org/man/ssh.1 - https://man.archlinux.org/man/ssh.1

View File

@ -12,7 +12,6 @@ publish: public
</script> </script>
# Giteaを始めよう # Giteaを始めよう
---
自分のサーバーにGiteaを立てたよという話です。 自分のサーバーにGiteaを立てたよという話です。
Giteaとは、GithubやGitlabなどのGitホスティングサービスの一つで、Giteaはオープンソースで、公式の[gitea.com](https://gitea.com)と(ほぼ)同様のものを自分でホストすることができます。 Giteaとは、GithubやGitlabなどのGitホスティングサービスの一つで、Giteaはオープンソースで、公式の[gitea.com](https://gitea.com)と(ほぼ)同様のものを自分でホストすることができます。
issue管理や、プロジェクト、Actions、Wiki等のリポジトリマネジメントに使える機能はGitlab issue管理や、プロジェクト、Actions、Wiki等のリポジトリマネジメントに使える機能はGitlab
@ -23,7 +22,6 @@ issue管理や、プロジェクト、Actions、Wiki等のリポジトリマネ
また、個人的な思想として中央集権的なシステムが好きではないので、自分のプロジェクトを分散管理したいなー、なんて欲求がそこはかとなくあったのです。まあ、自分はGithub Educationに入っているのでタダでけっこうなリソース使わせてくれるのですがね...(Github大好き♡) また、個人的な思想として中央集権的なシステムが好きではないので、自分のプロジェクトを分散管理したいなー、なんて欲求がそこはかとなくあったのです。まあ、自分はGithub Educationに入っているのでタダでけっこうなリソース使わせてくれるのですがね...(Github大好き♡)
# Dockerを使ったセルフホスティング # Dockerを使ったセルフホスティング
---
[Installation with Docker](https://docs.gitea.com/installation/install-with-docker)に書かれているようにdocker-composeファイルを作り、起動します。 [Installation with Docker](https://docs.gitea.com/installation/install-with-docker)に書かれているようにdocker-composeファイルを作り、起動します。
自分はMySQLをDBに設定しました。PostgreSQLを使った設定もあるようです。 自分はMySQLをDBに設定しました。PostgreSQLを使った設定もあるようです。
ポートは3000がウェブ、22がsshdとなっています。適当にホスト側のポートにバインドしておきます。 ポートは3000がウェブ、22がsshdとなっています。適当にホスト側のポートにバインドしておきます。

View File

View File

@ -11,7 +11,6 @@ publish: public
</script> </script>
# git-jsについて # git-jsについて
---
[git-js](https://github.com/steveukx/git-js)、パッケージ名は`simple-git`です。ここでは、simple-gitと呼びます。 [git-js](https://github.com/steveukx/git-js)、パッケージ名は`simple-git`です。ここでは、simple-gitと呼びます。
正直公式のREADMEが充実してるので記事書くか迷った。 正直公式のREADMEが充実してるので記事書くか迷った。
npmを使用して導入します。 npmを使用して導入します。
@ -23,7 +22,6 @@ npm i simple-git
なので、実行環境に入っているgitを利用する必要があり、グローバルのconfigも影響します。 なので、実行環境に入っているgitを利用する必要があり、グローバルのconfigも影響します。
# 使ってみる # 使ってみる
---
## インスタンスの作成  ## インスタンスの作成 
simple-gitインスタンスを作成します。 simple-gitインスタンスを作成します。
インスタンスの引数に取る`SimpleGitOptions` には、gitリポジトリであるディレクトリや`-c`でしてされる引数を設定できます。 インスタンスの引数に取る`SimpleGitOptions` には、gitリポジトリであるディレクトリや`-c`でしてされる引数を設定できます。
@ -56,7 +54,7 @@ git -c "http.proxy=someproxy" clone ...
``` ```
core.sshCommand=ssh -i ./path/to/key -F /dev/null core.sshCommand=ssh -i ./path/to/key -F /dev/null
``` ```
詳しくは[[git-ssh-config]]にまとめています。 詳しくは[git-ssh-config](./git-ssh-config)にまとめています。
## コマンドを実行する ## コマンドを実行する
インタフェースに関数として多くのラップされたコマンドが存在します。 インタフェースに関数として多くのラップされたコマンドが存在します。
一覧は[README](https://github.com/steveukx/git-js?tab=readme-ov-file#api)を参照してください。 一覧は[README](https://github.com/steveukx/git-js?tab=readme-ov-file#api)を参照してください。
@ -79,10 +77,8 @@ const commands = ['config', '--global', 'advice.pushNonFastForward', 'false'];
const result = await git.raw(...commands); const result = await git.raw(...commands);
``` ```
# まとめ # まとめ
---
もともと`child_process`の`execSync`をつかってGitコマンドを実行していましたが、帰ってきたデータを解析する手間がかかるのでありがたくライブラリに頼りました。 もともと`child_process`の`execSync`をつかってGitコマンドを実行していましたが、帰ってきたデータを解析する手間がかかるのでありがたくライブラリに頼りました。
似たようなライブラリに、[js-git](https://github.com/creationix/js-git)というものがありますが、これはGitのラッパーではなく、gitをjsで実装することで、様々な環境でgitを弄れるというものらしいです。機会があったら触ってみたい。 似たようなライブラリに、[js-git](https://github.com/creationix/js-git)というものがありますが、これはGitのラッパーではなく、gitをjsで実装することで、様々な環境でgitを弄れるというものらしいです。機会があったら触ってみたい。
# 参考文献 # 参考文献
---
- https://github.com/steveukx/git-js - https://github.com/steveukx/git-js
- https://neos21.net/blog/2020/07/24-01.html - https://neos21.net/blog/2020/07/24-01.html

View File

@ -11,7 +11,6 @@ publish: public
</script> </script>
# ビルド時にエラー # ビルド時にエラー
---
devでは問題ないのに、buildして確認するとエラーが出る..という問題の解決方法です。 devでは問題ないのに、buildして確認するとエラーが出る..という問題の解決方法です。
Postgres以外にもこの手のエラーはデータベースを使っていれば発生する可能性がありそうです。 Postgres以外にもこの手のエラーはデータベースを使っていれば発生する可能性がありそうです。
## 症状 ## 症状
@ -36,7 +35,6 @@ AggregateError [ECONNREFUSED]:
``` ```
# 原因 # 原因
---
SvelteKitはページをプリレンダリングするために、ビルド時にページのコードを実行します。 SvelteKitはページをプリレンダリングするために、ビルド時にページのコードを実行します。
リクエスト時に初めてモジュールが評価される場合でも、ページの`+page.server.ts`からモジュールを利用していると、モジュールの初期化によって接続が要求されエラーとなります。 リクエスト時に初めてモジュールが評価される場合でも、ページの`+page.server.ts`からモジュールを利用していると、モジュールの初期化によって接続が要求されエラーとなります。
@ -54,7 +52,6 @@ await db.query("hogehoge...")
``` ```
# 解決策 # 解決策
---
`hook.server.ts`を利用します。 `hook.server.ts`を利用します。
Hooksを使うことで、リクエストに対してカスタムデータをリクエストに追加し、ページのload関数に渡すことができます。 Hooksを使うことで、リクエストに対してカスタムデータをリクエストに追加し、ページのload関数に渡すことができます。
https://kit.svelte.dev/docs/hooks https://kit.svelte.dev/docs/hooks
@ -112,6 +109,5 @@ if (!building) {
しかし、DBの初期化時に一回だけ実行されるなら問題にはなりませんが、様々なページからDBにアクセスしようとするたびにこんな調子では面倒ですし、適当なクラスでラッパーしようにも結局場合分け等が煩わしいことになります。 しかし、DBの初期化時に一回だけ実行されるなら問題にはなりませんが、様々なページからDBにアクセスしようとするたびにこんな調子では面倒ですし、適当なクラスでラッパーしようにも結局場合分け等が煩わしいことになります。
# まとめ # まとめ
---
devでは期待通りに動くのに、いざbuildとなるとエラーを出されて悲しくなりました。 devでは期待通りに動くのに、いざbuildとなるとエラーを出されて悲しくなりました。
フレームワークの仕組みとしては合理的なので、文句も言えないのですが。 フレームワークの仕組みとしては合理的なので、文句も言えないのですが。