我尝试使用Python和repl.it免费运行Discord Bot???


背景

我经常在Discord上聊天,可能是因为我最近在Discord上做TRPG。
因此,这次,我们开发了一种BOT,它可以自动将便便表情符号附加到聊天中经常出现的"便便"上。
事实证明,如果这不是一个非常困难的机器人,那么实际上它可以在一个小时内操作(没有经验)。
让我们所有人都享受(无意义的)BOT开发,它可以像我一样丰富我们的生活!

本文是为具有Python基本知识的人撰写的。
此外,"粪便"一词无数次出现,但请原谅我。

实际开发

UnkoMan
スクリーンショット 2020-06-25 23.12.54.png
スクリーンショット 2020-06-25 23.13.19.png

开发环境

  • 复制

    • Python 3.8
    • discord.py 1.3.3
    • 烧瓶1.1.2
  • 正常运行时间机器人

关于Repl.it

  • 在线编码平台
  • 您可以从浏览器中显示的IDE运行代码
  • 您可以在网络上开发应用和网站

关于正常运行时间机器人

  • 一项允许您免费监视网络(最多50个)的服务

创建一个机器人账户

  • 转到Discord开发人员门户并使用您的Discord帐户登录

  • 按下New Application按钮并为其命名

    • 在我的情况下是Unko
      スクリーンショット 2020-06-25 22.27.56.png

  • 进入创建的应用程序,然后进入Bot选项卡。
  • 按下

    Add Bot按钮

    • 创建机器人后,您可以更改机器人的Username
    • 我在这里给它起了名字UnkoMan。 (不要忘记按Save Changes)
    • 您也可以在此处更改个人资料图片
    • 确保PUBLIC BOT已打开

    • 复制TOKEN
      スクリーンショット 2020-06-25 22.31.54.png

  • 创建

    Guild(公会==在Discord API中类似于服务器)。通过在Discord(应用程序)中按""按钮来创建服务器
    スクリーンショット 2020-06-25 22.33.07.png

  • 在服务器

    中注册机器人

    • 转到OAuth2选项卡,并检查SCOPES内部的Bot

    • スクリーンショット 2020-06-25 22.37.20.png
    • 还要从下面的BOT PERMISSIONS检查BOT所需的权限

      • 这次我只需要文本权限,所以我只检查了Send MessagesAdd Reactions
        スクリーンショット 2020-06-25 22.37.48.png

    • 然后将生成身份验证URL,因此将其复制并在浏览器中打开

      • 顺便说一句,如果要将僵尸程序添加到另一个人拥有的服务器中,也请使用此身份验证URL。
    • 选择您之前创建的服务器,然后按身份验证按钮
      スクリーンショット 2020-06-25 22.39.03.png

  • 确保该机器人已在您的服务器上!
    スクリーンショット 2020-06-25 22.41.01.png

  • 网络服务器

  • 转到Repl.it并创建一个Python repl
  • 打开Package选项卡并安装依赖项。在下面搜索并安装

    • 不和谐
    • 烧瓶
  • スクリーンショット 2020-06-25 22.42.53.png

  • 创建一个名为server.py的新文件

  • スクリーンショット 2020-06-25 22.43.47.png

    • 使用Flask和Thread创建服务器
    • 稍后让服务器ping Uptime机械手

    server.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from flask import Flask
    from threading import Thread

    app = Flask("")

    @app.route("/")
    def main():
      return "UnkoMan is alive!"

    def run():
      app.run("0.0.0.0", port=8080)

    def keep_alive():
      t = Thread(target=run)
      t.start()

    机器人

  • 创建一个.env文件

  • 1
    TOKEN=先ほどコピーしておいたTOKEN
  • main.py中编写您想要制造的机器人类型。我将在下面的代码中用注释进行解释

  • 规格

    • UNNKO_LIST中的单词上添加便便表情符号

    • 如果提及您(或者被告知您"饿了"),请给出一些答复
    • 当有新朋友进来时自我介绍

    main.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    import os
    import discord
    from server import keep_alive


    # うんこに関する言葉のリスト
    UNKO_LIST = ["うん", "うんこ", "poop", "うんち", "unnko", "unko", "くそ", "クソ", "糞", "大便", "排泄物", "ばば", "糞便", "crap", "feces", "manure", "shit"]


    # .envからTOKENを取ってくる
    TOKEN = os.getenv("TOKEN")
    # 接続するためのオブジェクト
    client = discord.Client()


    # 起動時にログする
    # @デコレーターを使ってイベントをハンドルします
    @client.event
    async def on_ready():
        print('UnkoMan is here')


    @client.event
    async def on_message(message):
        message.content = message.content.lower()

        # メッセージの送信者がBot自身だった場合は無視
        if message.author == client.user:
            return

        # メンションされたら返信
        if client.user in message.mentions:
            await reply_unko(message)

        # メッセージ自体または、メッセージの中にうんこ(うん以外)が入ってたら、うんこの絵文字
        if message.content in UNKO_LIST or any(s in message.content for s in UNKO_LIST[1:]):
            await react_unko(message)

        # 隠しコマンド:お腹すいたら、特別メッセージを送るよ
        if "お腹すいた" in message.content:
            await reply_unko(message, "お腹すいた")


    async def reply_unko(message, special=""):
        if special == "お腹すいた":
            reply = "とりあえずうんこでも食っておけ(辛辣)"
        else:
            reply = f'{message.author.mention} 呼んだ?え?うんこ?あーそれは一理あるね'

        # メッセージの送信と送信したメッセージにうんこを
        sent_msg = await message.channel.send(reply)
        await react_unko(message)
        await react_unko(sent_msg)


    # うんこの絵文字をメッセージに付ける
    async def react_unko(message):
        await message.add_reaction("??")


    # 新しい人が入ってきたとき
    @client.event
    async def on_member_join(member):
        # guildはdiscord内のserverのこと
        for channel in member.guild.channels:
            # generalチャンネルでの自己紹介
            if str(channel) == "general":
                await channel.send_message(f"""初めまして {member.mention}さん うんこマンです!""")

    # ウェブサーバーを起動する
    keep_alive()

    # Discordへ接続
    client.run(TOKEN)

    复制中按run按钮执行!

    您的机器人现在应该在Discord的服务器上运行!

    要记住的一件事是,repl.it闲置一小时后,repl将脱机。
    作为对策,我将解释如何使用Uptime Robot一年365天,每天24小时操作该机器人。

    正常运行时间机器人

  • 使用Uptime Robot创建帐户
  • 按下

    + Add New Monitor按钮
    スクリーンショット 2020-06-25 22.47.38.png

  • Monitor Type设置为HTTP(S),将Friendly Name设置为您喜欢的名称,将URL设置为repl.it,并将Monitoring Interval设置为every 30 minutes以防止repl脱机

    • 检查Alert Contacts To Notify,好像发生了错误
  • 按下

    Create Monitor按钮,您就完成了!
    スクリーンショット 2020-06-25 22.50.01.png

  • 附录

    • " Repl它只是另一台主机,将无法全天候托管它,因此它将每24小时内停机几分钟"。因此,它似乎无法一天365天,每天24小时运行年。在24小时内,似乎有几分钟的停机时间,但让我们闭上眼睛...

    在末尾

    怎么样了?您是一个令人信服的机器人吗?
    如果需要更多功能,建议阅读文档。

    我在相关文章中发表了有关Qiita的文章,但似乎Heroku甚至可以免费托管机器人。 Heroku被误解了,因为我只将其用于Web应用程序开发,但是显然" Heroku的免费计划在30分钟内无法使Web应用程序进入睡眠状态,但是我介绍的步骤将使您进入Web。它一直在运行。没有任何问题,因为它不使用任何进程。"
    好吧,我必须创建Procfile和其他文件,因此使用repl.it实现它并没有太大的麻烦...大声笑

    这是我这次创建的机器人,但是如果有人想将其投入实际使用,请使用UnkoMan。

    另外,如果您有任何意见或疑问,例如UnkoMan最高,请告诉我们!

    相关文章?

    • 在repl.it上托管discord.py机器人
    • Python中的实用Discord Bot(不一致注释)
    • 创建一个机器人账户