marukot-chの日記

弱小SEの雑記です

スラッシュコマンドを使うDiscord Botは/helpを潰さないでほしい

タイトル通り。

スラッシュコマンドを使わないBotのヘルプが使えなくなってしまうため。

f:id:marukot-ch:20210606205445p:plain

/helpをするとコイツが発動する

 

対処方法

<スラッシュコマンドを使うBotでできる方法>

・/help-rythmなど、Bot名を後ろにつける(前でもいいよ。/help以外なら)

多分、普通にコマンドに色々書いている気がするのでそうやってほしい!

 

 

<スラッシュコマンドを使わないBotでできる方法>

・スラッシュ以外の記号を使うようにする(スラッシュコマンドは「/」(スラッシュ)しか見なかった気がするので)

・helpコマンドの呼び出しを別名にする(下記のあとがきに書いてある方法)

 

最終的には全部、スラッシュコマンドに対応する気もするので、過渡期のときだけの問題かもしれないなって思ってる。

続きを読む

DiscordでReacji-ChannelerできるBot作って公開した(使ってみて感想ください)

Reacji Channelerとは?

「リアク字」と呼ばれる専用の絵文字リアクションを使用して、パブリックチャンネルから別のチャンネルにメッセージをサクッとコピーできます。 あるチャンネルに投稿された内容が、ワークスペース内の他のチャンネルでの会話にも役立つ場合などに便利な機能

slack.com

june29.jp

 

今回作ったBotの特徴

・Discordのスラッシュコマンドに対応(追加, 削除, 確認)

Botが見えるところなら、プライベートなチャンネルにも対応

環境変数で許可すれば、DiscordのWebhookを転送先として指定可能

・リアクションを何回でも反応するように環境変数で指定可能

・ひとつのリアクションに複数のチャンネルを登録可能

・reacji-channeler(本家)は本人にしか見えないが、このBotは他人にも見える(今のソースがそういう状態にしてあるだけで、Discordのスラッシュコマンドの関数の呼び方で挙動を変えることもできる*1

 

招待リンク

https://discord.com/api/oauth2/authorize?client_id=845237643322327060&permissions=2147871824&scope=bot%20applications.commands

*ぜひ、使ってみてください! 処理が重い場合、後述するReplitでクローンして自分専用のやつを作ってみるといいと思います!!

  • Reacji Channelerとは?
  • 今回作ったBotの特徴
  • 挙動について比較
    • 追加
    • DIscord
    • 確認
    • 削除
    • 全削除
    • 動画(Slack)
    • 動画(Discord)

f:id:marukot-ch:20210523195522p:plain

Discord-Reacji-Channelerの画像


 

*1:Migration — discord-py-slash-command documentation

にある通り、ctx.sendのパラメータに、hidden = Trueを入れるだけ

続きを読む

今日か明日、Discord用のReacji Channelerを作るYouTube配信します

今回やること

- Reacji Channeler機能を単機能で持つリポジトリを作る
- https://slack.com/intl/ja-jp/help/articles/360000482666-Slack-用リアク字チャンネラー
- スラッシュコマンドに対応させる(今日の配信ではやらない説が濃厚)

 

使うリポジトリ

今回作成するリポジトリ

- https://github.com/tetsuya-ki/discord-reacji-channeler

 

もともと機能があるリポジトリ(ここから分離する)

- https://github.com/tetsuya-ki/discord-bot-heroku

 

古川本舗のライブが見たかったり、ゲームするので、具体的な日時は未定。ライブ後(今日の20:30)か明日のお昼くらいにやる気がしています。

なにかあったら追記します。

YoutubeのURL

youtu.be

Discord BotでボードゲームやTRPG、サイコロフィクションするやつをまとめる

タイトルですべて説明してしまったけれど、DiscordのBotボードゲームTRPG、サイコロフィクションするものを紹介する(遊んだことないもの多数/というか自作のBotしか遊んだことない)。けっこう需要は有りそうな気がしているが、あまり見かけない。Twitterで公開しているけれど、全然登録してくれない(悲しみ)。。。

 

  • Botの招待リンクがある(招待すればすぐ使える)
  • ソースは公開されている(自分で動かす必要あり)
  • アプリは公開されている(自分で動かす必要あり)
  • その他

 

続きを読む

2018年だかくらいにメモしてた、お気に入りのCDと気になってたバンド・アーティスト

独断と偏見(思い込み多め/販売数すら見てない)のどうでもメモ(すてきな音楽随時募集中)

 

■お気に入りのCD

amazarashi「爆弾の作り方」 最近の雨ざらしはピアノの人でてこない気がする。あと残酷さが減って一般に迎合している気がする

androp「door」 最近聞かない(楽曲提供など色々しているみたいだ)

arthur「*rakuda*」 とても欲しかったのでAmazonのマーケットプレースで6000円で中古のCDを買った(作曲者の作った次のグループ、ニコラフはいつの間にかサイトが消えてた)

ASIAN KUNG-FU GENERATION君繋ファイブエム

audio safari「ウルノソラ」 次のバンド(neue nahel)も2018年にはサイトが消えてた......。CD1枚か...

the band apart「K. AND HIS BIKE」

Bahashishi「心の世界」 コンポーザーさんが自転車の事故で意識不明になって、2016年あたりにお亡くなりになってしまった。まぁその前にバンドは解散してたけど

canappeco「misora sketch」mixiで次なんかやるぞ〜って記事のあと、よくわからなくなってしまった。。。残念

GOING UNDER GROUND「おやすみモンスター」 リーダーの人が2016年だかに辞めて、3人体制になって、2018年あたりにまたメジャーになってた気がする

GOOD BYE APRIL「夢見るモンシロ」 とても素敵なバンドだけど、売れてる気がしない

KAREN「Maggot in Tears」ボーカルの人はRopesを始めたらしい

nano.RIPE「プラスとマイナスのしくみ」

ONE OK ROCK「ゼイタクビョウ」 めちゃくちゃ売れてるけど、なんか自分の望まない方向に行ってしまった感がある...

People In The Box「Ghost Apple」 それなりに売れてるけど、僕の好きじゃない方面への複雑さを増してしまった...。

sleep warp「afterword」最近、活動再開している風味がある(Youtubeや音楽リリースした/相変わらず良い)

strawberry record「説明不足」

くるり「魂のゆくえ」 そのときどきで違ってて、いつも面白い音楽だしてて、やっぱりすごいなぁって思う

さよならポニーテール「魔法のメロディ」 アイドルレーベルになったり、神さま(さよポニを見る=いらすととか書く)が居なくなったり、いろいろ挑戦しているが売れてる気はしない

ジャパハリネット「現実逃走記」 2018年あたりに復活したりしたが、最近見かけない

ストレイテナー「title」いつもストレイテナーらしさを失っておらず好き

スネオヘアー「カナシミ」「a water color」 最近みかけない(離婚したあたりから特に)

スピッツ「さざなみCD」

スムルース「ドリーミーワームホール辞典」

ネズミハナビ「BOY」 昔のほうが好きだったが、今でもいい曲を作る

ハンバートハンバート「まっくらやみのにらめっこ」 スペースシャワーに移ってよかったなぁって感じ。作品の発表スピードが早くなった。でもベスト盤的なのだしすぎ感(ソロの佐藤良成も好き。日が落ちるまではソロのが良かった)

フジファブリックフジファブリック」 ボーカルの志村さんが亡くなって、活動休止しなくてびっくりしたが、2018年あたりになっていい曲をいっぱい作るようになった印象。アニソン提供とかの聞きやすい

古川本舗「ガールフレンド・フロム・キョウト」 スペースシャワーが辛かったのか(年1枚アルバム出せっていうノルマだかがあったらしい?)音楽活動休止して、2017年の年末だか一瞬ちらっとして沈黙。2020年12月に突如復活!

メレンゲ「星の出来事」全然聞かない気もするがいい曲を書く

9mm Parabellum Bullet「Gjallarhorn」 ギターの人が調子悪くなったり治ったりしたらしい キツネツキみたいなバンドをゆるくはじめたらしい。ギターの人がドラム?とか

Chouchou「ALEXANDRITE」 慎ましく活動している

六弦アリス「独裁者ノススメ」 アニメのタイアップとか作っててびっくり。好き(Psylent Majority ~イデア座の夜~ 良かったな)

ghq「grahambread quicklunch」検索するとGHQばかりひっかかるすごい名前のバンド。TSUTAYAで借りて存在を知った気がするのでそれなりに有名かもしれない。テイストが好き

■気になっている音楽家またはバンドまたはグループ

nicoten 「Exit e.p.」

LACCO TOWER 「ハネビラ」「短編傷説」 少女漫画の世界の終わりとなんちゃらかんちゃらってので取材されてた。意外とマイナーじゃないの??

古川本舗 「SOUP」「ガールフレンド・フロム・キョウト」「Alice in wonder word」「Singalong4」 2015年でおしまい。フルカワリョウとしてなんかする?(2019時点でもとくになし。2017年年末だかちょこっとネットに復活したが・・・?)

カフカ 「呼吸-inhale-」

カミナリグモ 「BRAIN MAGIC SHOW」「MY DROWSY COCKPIT」「SMASH THIS WORLD!」「ツキヒノォト」 解散済

ハルカトミユキ 「虚言者が夜明けを告げる。(以下省略)」「真夜中の言葉は青い毒になり、(以下省略)」 2018年あたりにアニソンだしててびっくり(タイアップ

aquarifa 作曲者さん、sora tob sakanaとかでも活動してるらしい?っって思ったら1曲提供しただけ? これが縁でsora tob sakanaに注目したが、一番気になってた子が2019年5月で卒業したらしい(そして解散へ)

ゲスの極み乙女。 2016年にベッキー事件とかがあって活動休止とかしちゃってる(indigoも含め) 2018年だかに再開した。ぱっとしない

ヒトリエ 現実逃避P(ローリンガール、裏表ラバーズなど)が主体となったバンドらしい。2019年4月だかに29歳で亡くなってしまったそう。悲しみ

Hello Sleepwalkers

GOOD IN THE REEL

阿部真央 「ふりぃ」「戦いは終わらない」「素。」 音楽プロデューサーだかと結婚して、活動休止して最近聞かない。2018年だかに活動再開したが全然しらない

でんぱ組.inc

ドレスコーズ

青葉市子 2019年にライブ行ってみた。声帯模写うまいし声も奇麗だし声優になればいいと思った。朗読とかCD出してほしいなー

七尾旅人

ふぇのたす ベースの人がいなくなってしまったので解散 2017年 また別の名前ではじめた?

南壽あさ子 なんかラジオやってるらしい?(フランネルいい曲)

300字のリアル Youtubeで見かけたのがはじまりだけど、それっきり活動してなさそう

ズーカラデル ちょっとゆるい感じが好き。ネバヤンが意外に受けてるならこっちもいけるのではって思う

neco hacker 完全に名前から入ったがわるくないとおもう

 

--

最近好きやなぁって思ったのは、「aus」

注目してるのは「Kensei Ogata」(何かで知り買ってたviewtorinoの人と知ってびっくり)、「崎山蒼志」、「歩く人」、「R Sound Design」

--

期待はずれだったのが、佐咲紗花「atlantico Blue」、「マリンブルーに沿って」や「キスのひとつで」が良かったからアルバムも買ってみたけれど、他の曲は特段興味を惹かれず。堀江晶太さんの曲が好きなだけなのかも(彼の人は編曲もやっているが、そちらはそんな惹かれない。ぺんぎんりさーちは聞いたことがない) 。橋本絵莉子波多野裕文橋本絵莉子波多野裕文」。チャットモンチーPeople In The Boxも好きだしと思って買ってみたが、なんか普通だった(穏やかな狂気って感じ/ふたりとも稀有なボーカリストなんだけど、うーん。Peopleみが強すぎる気もする/トークトークは好き(波多野さんのボーカルで聞きたかったかも))。

注目してないのは「藤井風」(曲があんまり興味無いふうみ)

 

オススメの音楽あったら教えてほしいのだけど、そういうのはどうすればいいんだろうな。こういうヤツに参加してみて色々聞いてみるのがいいのかなぁ

scrapbox.io

エタってしまったかもしれない好きな商業ラノベ

エターナルの語源はツクールらしく、エタる(エタった)はだめです、みたいな記事を見て、そういえば、もう続刊はでないかもしれないけれど、好きな商業ラノベがいくつかあることを思い出したのでメモっておく。

(2021/6/10追記)学校を出よう!を思い出したので追加

続きを読む

discord.pyはまだスラッシュコマンドを実装しないが、他ライブラリを使用すれば使える

注意

  • こちらの記事は古の時代の記事となります
  • もし自分が2022年に実行するなら、素直にdiscord.py v2.0aのスラッシュコマンドを使います -- discord.py v2.0aはまだかんたんにインポートできません。githubからクローンする感じで使います -- スラッシュコマンドの作り方はこちらが参考になります(英語)

    あらすじ

  • Community UpdatesでDiscordにスラッシュコマンド実装されたことを知る
  • Qiitaにある記事はいいものだった
  • Pythonの使い方がわかってなくてClassの場合のスラッシュコマンドライブラリの使い方に手間取ったが動くようにできた

目次

前置き

誰も人はいないけれど、コミュニティサーバーを運営してる。

そこで、スラッシュコマンドが使えるようになった旨のメッセージがDiscordのCommunity Updatesとして来ていた(コミュニティサーバーにするとその辺の情報を得ることができる)。

discord.pyはまだ対応しないつもりに見える(2021/09/04追記あり)

  • よくわからないが、正式版になってから対応するぞ!と言っている気がする...
  • ちょっと残念
  • 2021/09/04追記
    • discord.pyは開発凍結されたため、フォークされたプロジェクト等による実装を待つしか無い状況になってしまいました
    • 他のライブラリを使うなりすれば、普通に動くので、そのまま使っていても良いとは思います
    • ただ、Discord側に大きな変更があった際の対応がどうなるかが心配ではあります...

github.com

Qiitaの記事

Googleで調べてみると、Qiitaの記事が検索された。ほぼ、公式ページのquickstart*1を日本語化したような記事かと思ったが、制限事項などをきちんと盛り込んでありとても良い。

qiita.com

公式の記事

Discordの公式の制限事項も分かりやすいけれども、英語だからなぁ。グローバルコマンド、ギルドコマンドの50個制限は、グローバルコマンドが50個、ギルドごとに各50個ずつって意味らしい。

discord.com

An app can have up to 50 top-level global commands (50 commands with unique names) An app can have up to an additional 50 guild commands per guild An app can have up to 10 subcommand groups on a top-level command An app can have up to 10 subcommands within a subcommand group choices can have up to 10 values per option commands can have up to 10 options per command Limitations on command names Limitations on nesting subcommands and groups

グローバルコマンドは1時間程度登録に時間がかかり、ギルドコマンドは即時反映というのはThis command will be available on all your app's guilds.*2のあたりに書いてあるやつかな。

 

使うにあたり悩んだこと

今回使ってみるにあたり悩んだことがあって、こういう単純なタイプなら動くけれど(cogでの使い方はpypiが詳しい*3

from discord.ext import commands
from discord_slash import SlashCommand
from logging import basicConfig, getLogger

import discord

basicConfig(level=setting.LOG_LEVEL)
LOG = getLogger(__name__)

# 読み込むCogの名前を格納しておく。
INITIAL_EXTENSIONS = [
    'cogs.testcog'
    , 'cogs.slashcog'
]

async def on_ready(self):
    LOG.info('We have logged in as {0.user}'.format(self))

intents = discord.Intents.all()
intents.typing = False

bot = commands.Bot(command_prefix='/', intents=intents, case_insensitive=True)
slash = SlashCommand(bot, sync_commands=True)

for cog in INITIAL_EXTENSIONS:
    bot.load_extension(cog)
bot.run'__DISCORD_TOKEN__')

Classとかでやっているタイプは動かなくて。試行錯誤して、ちゃんとcommands.BotでSlashCommandを作れば良いと分かった(Pythonオブジェクト指向がちゃんと分かっている人は多分quickstartを見ただけでわかるんだろうな...)。

ダメだったやつ
from discord.ext import commands
from discord_slash import SlashCommand
from logging import basicConfig, getLogger

import discord

basicConfig(level=setting.LOG_LEVEL)
LOG = getLogger(__name__)

# 読み込むCogの名前を格納しておく。
INITIAL_EXTENSIONS = [
    'cogs.testcog'
    ,'cogs.slashcog'
]

class DiscordReminderBot(commands.Bot):
    # MyBotのコンストラクタ。
    def __init__(self, command_prefix, intents):
        # スーパークラスのコンストラクタに値を渡して実行。
        super().__init__(command_prefix, case_insensitive=True, intents=intents)

        # INITIAL_EXTENSIONSに格納されている名前から、コグを読み込む。
        for cog in INITIAL_EXTENSIONS:
            self.load_extension(cog)

     async def on_ready(self):
         LOG.info('We have logged in as {0.user}'.format(self))

# discord-reminderbotbのインスタンス化、および、起動処理
if __name__ == '__main__':
    intents = discord.Intents.all()
    intents.typing = False
    intents.members = False
    intents.presences = False

    bot = DiscordReminderBot(command_prefix='/', intents=intents)
    slash = SlashCommand(bot, sync_commands=True) #ここはダメ

    bot.run(setting.DISCORD_TOKEN)
うまく動いたやつ
from discord.ext import commands
from discord_slash import SlashCommand
from logging import basicConfig, getLogger

import discord

basicConfig(level=setting.LOG_LEVEL)
LOG = getLogger(__name__)

# 読み込むCogの名前を格納しておく。
INITIAL_EXTENSIONS = [
    'cogs.testcog'
    ,'cogs.slashcog'
]

class DiscordReminderBot(commands.Bot):
    # MyBotのコンストラクタ。
    def __init__(self, command_prefix, intents):
        # スーパークラスのコンストラクタに値を渡して実行。
        super().__init__(command_prefix, case_insensitive=True, intents=intents)
        slash = SlashCommand(self, sync_commands=True) # ココにslashをおこう!(第一引数はself)

        # INITIAL_EXTENSIONSに格納されている名前から、コグを読み込む。
        for cog in INITIAL_EXTENSIONS:
            self.load_extension(cog)

     async def on_ready(self):
        LOG.info('We have logged in as {0.user}'.format(self))

# discord-reminderbotbのインスタンス化、および、起動処理
if __name__ == '__main__':
    intents = discord.Intents.all()
    intents.typing = False
    intents.members = False
    intents.presences = False

    bot = DiscordReminderBot(command_prefix='/', intents=intents)
    bot.run(setting.DISCORD_TOKEN)

追記(2021/05/16)

  • v2.0でdiscord.pyはスラッシュコマンドをサポートするらしい(Twitterでそんな話を見かけつつも確認していなかった)

github.com

  • いくつかのパターンの最小限のBot(discord.py)を下記に書いてみたので、もし参考になる人がいれば確認してほしい(そしてScrapboxプロジェクトに参加して記事を充実してほしい/プロジェクトに参加するとメンバーにメールアドレスが知られてしまうのでその点は注意)

scrapbox.io

追記(2021/09/04)

note.com

qiita.com

smhn.info