20211008のNode.jsに関する記事は3件です。

Discord.jsで認証機能を作ろう!

初めに 今回はDiscordの認証botを作っていきます! 必要なもの 1.discord.jsv12 入れる方法 npm i discord.js@12 とターミナル打つ if (message.content === '+認証') { var S = "1234567890" var N = 4 var A = Array.from(Array(N)).map(() => S[Math.floor(Math.random() * S.length)]).join('') var useravater = message.author.avatarURL({ format: 'png' }); var guildicon = message.guild.iconURL({ format: 'png' }); const { createCanvas, loadImage, registerFont } = require('canvas'); registerFont('UDDigiKyokashoN-R.ttc', { family: 'UD Digi Kyokasho N-R' }); const canvas = createCanvas(800, 500); const ctx = canvas.getContext('2d'); loadImage(useravater).then(image => { ctx.drawImage(image, (800 - image.width) / 2, 150, 130, 130); ctx.strokeStyle = '#000000'; var n = "認証コード"; ctx.font = '50px UD Digi Kyokasho N-R'; ctx.fillStyle = '#55C500'; ctx.fillText(n, (800 - ctx.measureText(n).width) / 2, 120); var username = message.author.tag; ctx.font = '30px UD Digi Kyokasho N-R'; ctx.fillStyle = '#76D4BC'; ctx.fillText(username, (800 - ctx.measureText(username).width) / 2, 330); ctx.font = '50px UD Digi Kyokasho N-R'; ctx.fillStyle = '#0095D9'; ctx.fillText("code:" + A, (800 - ctx.measureText("code" + A).width) / 2, 400); var write = new Buffer.from(canvas.toDataURL('image/png').replace('data:image/png;base64,', ''), 'base64'); message.channel.send({ files: [{ attachment: write, name: 'remove.png' }] }); }); let myRole = message.guild.roles.cache.find(role => role.name === "メンバー"); if (!myRole) { message.guild.roles.create({ data: { name: "メンバー", color: "#ff0000", permissions: 0, position: 0 } }).then(role => { message.channel.send("初回でメンバーロールを作りましたメンバーロールの権限設定をしてください"); }).catch(console.error); } setTimeout(async function () { message.channel.awaitMessages(() => true, { max: 1, time: 10 * 1000 }).then(collected => { if (!collected.size) return message.channel.send('メッセージが送信されませんでした(タイムアウト)') if (collected.first().content === A) { const role = message.guild.roles.cache.find(role => role.name === 'メンバー') message.member.roles.add(role) message.channel.send("認証成功"); } else { message.channel.send("認証番号が違います"); } }) }, 3000); } 説明 コードの中に書きました 最後に 公式サーバー 入る サイト 見る 公式サイト 見る 私のbotをよかったらいれてください 入れる 個別に質問したい場合などはBURI#9515まで プログラムのソースコードは、そのコードを書いた人の著作物にあたる ため、著作権法による保護の対象となります。 そのため、ライセンスが定められていないプログラムは、その著作者から明示的に許可を受けない限り、ソースコードを複製したり、再頒布したり、手を加えたりすることができません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node-RED+UIFlowでノンプログラミングをして、フリーズしたPCを再起動するプログラムを作る

初めに 環境 クライアント側 Windows 10 Atom Lite Unit Relay サーバー側 Node-REDを実行しているWindows Server UIFlowというサービス 手段 環境構築 M5burner M5burnerをダウンロードしUIFlowのファームウェアを書き込む 左側のデバイス一覧からATOMを選ぶ 上のCOMポートからatom liteに該当するものを選ぶ 判別にはデバイスマネージャーのポート(COMとLPT)を開いた状態でatom liteを抜き差しし、消えたり現れたりするCOMポートを選ぶ (LEDマトリクスのついていない)Atom Liteの場合はUIFlow(Lite)を書き込む(Burn) WiFiのSSIDとPWを入力 書き込み後、Burnの横のConfigurationを開くとUIFlowからプログラムを書き込むのに必要なApi Keyが得られる UIFlow UIFlowにアクセスする ポップアップが出てくるので、Atom Liteとrelayの組み合わせを選ぶ。Api Keyには先ほど得た値を入れる。 入力を終えると(おそらく)Atom LiteがWiFi経由でM5stackのサーバーにつながり、ブラウザからプログラムを書き込むことが可能になる。 Node-RED インストール手段はこのページで説明したため、省略する。 windows serverでMQTTブローカーを開くため、MQTTで用いるポートを開く ファイヤーウォールの詳細設定で可能 デフォルトは1883(一応変更推奨)、プロトコル:TCP Node-RED上では私の環境では原因不明なエラーによりノードのインストールができないため、サーバーのターミナル上でnode-red-dashboardとnode-red-contribute-aedesをインストールする。 npm i node-red-dashboard node-red-contribute-aedes プログラム作成 UIFlow上(Atom Lite) MQTTブローカー(Windows ServerのNode-RED内)の設定 IPアドレスとポートは適宜設定 デバッグ用のMQTTパケット送信部 再起動するというMQTTパケットを収得し、リレーを正常に作動させることができた場合、successというMQTTパケットを送る リレーの動作 リレーをつなぎ、一定時間がたった後にリレーを切る リレー作動中はRGBを交互に点灯する 再起動のMQTTパケットを受け取る部分 もしパケット中のreboot要素がtrueの時のみ再起動する 最初にリレーを5秒間作動させてPCを強制終了 1秒待った後、リレーを2秒間作動させて起動する。 実行ボタンはプログラムを揮発性の領域に入れるため、電源を外すと消えてしまう。したがって、最終的にプログラムを書き込む際にはダウンロードのボタンを押す。 Atom Liteのデバッグ 下の画像に示すようなRemote+要素を用いることによってブラウザからAtom Lite内の変数の値の確認ができる Node-RED上 下画像のDashboardをクリックした後 配置で新しいタブを作り、その中に新しいグループを作る。 画像を参考にフローを作る 書いてある名称は任意に変更できるので、アイコンを目印に対応するノードを探す。 設定内容(デフォルトのままの場合は記載なし) mqtt in サーバー: localhost:1883 トピック: pc1_debug 出力: 文字列 text Group: 先ほど作ったグループを選択 button Group: 先ほど作ったグループを選択 payload: {"reboot": "true"} Topic: pc1 mqtt out サーバー: localhost:1883 デプロイするとdashboardにボタンが生成される。下画像の右上のアイコンをクリックして、異なるタブで内容を確認する。 下画像のようなボタンが現れているはずである。 REBOOTを押すと、{"reboot":"true"}という文字が表示され、リレーが2回オンオフされる。その後、successという文字列が現れる。 動作 出力 Node-RED dashboardのボタンが押されたとき、再起動を指示するMQTTパケットがNode-RED MQTTブローカーから出される。これをAtom Liteが受け取り、再起動を実行する。 入力 再起動後、Atom Liteはsuccessという文字の入ったMQTTパケットをNode-RED MQTTブローカーに送る。これがNode-RED dashboardに表示され、ユーザーは再起動が成功したことを確認することができる。 MQTTのデバッグ スマートフォンのアプリストアでmqttと検索すると、MQTTパケットの送受信ができるアプリが出てくる。これを用いることでMQTTパケットが正常に出されているかを確認することできる。 Note Atom LiteのLEDがつかなくなることが頻繁にあった 原因はアップロードしたpythonプログラムにバグがあったこと M5BurnerのConfigurationでApp modeからUSB modeに戻すと再びLEDがついた App modeはAtom Liteのフラッシュメモリ中のPythonプログラムを実行する Internet modeはオンラインのUIFlowでプログラミングするモード 起動後、LEDは赤色に点灯する。(おそらく)Wifi接続が完了すると緑色に点灯する USB modeはオフライン(PC)のUIFlowでプログラミングするモード 参考リンク https://qiita.com/youtoy/items/17739b7f4197a8d3fa4d https://raspberrypi.mongonta.com/howto-use-uiflow-with-m5atom/ https://www.1ft-seabass.jp/memo/2018/05/10/m5stack-meets-nodered-with-mqtt/ https://note.com/ogkt/n/na459421865d6-
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ServerlessFrameworkでHot Reload対応する

ServerlessFrameWorkのバグで、ホットリロードがデフォルト設定されていない。 対応方法を記載する。 serverless.ts import type { AWS } from '@serverless/typescript'; import hello from '@functions/hello'; const serverlessConfiguration: AWS = { service: 'mock', frameworkVersion: '2', custom: { webpack: { webpackConfig: './webpack.config.js', includeModules: true, }, useChildProcesses: true // ホットリロードの設定をする。←追加する。 }, plugins: ['serverless-webpack', 'serverless-offline'], provider: { name: 'aws', runtime: 'nodejs14.x', apiGateway: { minimumCompressionSize: 1024, shouldStartNameWithService: true, }, environment: { AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1', }, lambdaHashingVersion: '20201221', }, // import the function via paths functions: { hello }, }; module.exports = serverlessConfiguration; ■参考文献 https://github.com/dherault/serverless-offline/issues/931
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む