【代码+方案+思考】Discord 运营及个性化方案


文章目录

  • 前言
  • 一、Discord Bot
    • 1. 获取 Token
    • 2. 连接API测试
    • 3. Bot自动回复
    • 4. Bot音频播放
    • 5. Bot回复Button
    • 6. Bot 接入ChatGPT
    • 7. Bot 显示个人简介
    • 8. Bot 发送附件/Coin限制/内容信息板
    • 10. 特别笔记
      • 1) 同时使用@client.event和@client.command


前言

要做好海外产品需要更好个性化运营社群,discord目前是比较成熟的解决方案


一、Discord Bot

1. 获取 Token

# link: discord.com/developers
1. Go Developer 
# 新建项目
2. New Application ->  Creat Project Name 
# 设置机器人权限获取链接
3. OAuth2 - > URL Generator -> bot(select)- > permission(select) -> copy URL
#  打开链接关联Topic
4. Open URL and authorize
#  添加机器人获取Token
6. Back to developoer Menu -> Bot -> Add Bot -> Copy Token

2. 连接API测试

!pip3 install discord # 安装模块
import discordToken  = ‘’
client = discord.Client(intents=discord.Intents.all())
client.run(Token)
注:需要租用海外服务器,否则无法连接discord登录

3. Bot自动回复

# django .view
def discord_bot(request):import discord,osTOKEN = 'xxxx-xxxx'client = discord.Client(intents=discord.Intents.default())@client.eventasync def on_ready():print('Long time no see , my friend')@client.eventasync def on_message(message):if message.author == client.user:returnif message.content.startswith('hello'):await message.channel.send('Welcome!')client.run(TOKEN)return HttpResponse('Bot Success')

4. Bot音频播放

view.py

def discord(request):key = request.POST.get('key')if key == '****':if request.method == 'POST':import discord,os,random,urllib.request,re,time,threadingfrom discord.ext import commands# 验证码TOKEN = ''# 建立对话客户端,指定命令启动符为/,开放所有的意图# ⚠️ 此处一定需要打开Discord Develope - Bot - “Privileged Gateway Intents” 的选项client = commands.Bot(command_prefix="/",intents=discord.Intents.all())# 当接收「/play」播放指令             @client.command()async def play(ctx):# 指定语音播放的频道voiceChannel = discord.utils.get(ctx.guild.voice_channels, name='General')# 添加机器人并建立链接try:await voiceChannel.connect()except:await ctx.send("Bot already connected")# 指定公会voice = discord.utils.get(client.voice_clients, guild=ctx.guild)# 音频地址 | http外链可能会要求不同的ffmpeg内插件,需要补充安装mp3_path = 'demo.mp3'# 如果找不到ffmpeg,可以指定安装位置,添加executableffmpeg_path = '/root/ffmpeg-3.1/ffmpeg'voice.play(discord.FFmpegPCMAudio(executable=ffmpeg_path,source=mp3_path)# 当接收「/leave」退出指令 @client.command()async def leave(ctx):voice = discord.utils.get(client.voice_clients, guild=ctx.guild)if voice.is_connected():await voice.disconnect()else:await ctx.send("The bot is not connected to a voice channel.")# 当接收「/pause」暂停指令 @client.command()async def pause(ctx):voice = discord.utils.get(client.voice_clients, guild=ctx.guild)if voice.is_playing():voice.pause()else:await ctx.send("Currently no audio is playing.")# 当接收「/resume」继续播放指令        @client.command()async def resume(ctx):voice = discord.utils.get(client.voice_clients, guild=ctx.guild)if voice.is_paused():voice.resume()else:await ctx.send("The audio is not paused.")# 当接收「/stop」暂停播放指令@client.command()async def stop(ctx):voice = discord.utils.get(client.voice_clients, guild=ctx.guild)voice.stop()# 运行程序try:   # runtime       client.run(TOKEN)return HttpResponse('BOT CLOSED')except:return HttpResponse('Discord connect failed')client.run(TOKEN)return HttpResponse('')else:return HttpResponse('')

用户prompt功能

import discord, random
from discord.ext import commands
from discord import app_commandsclient = commands.Bot(command_prefix="/",intents=discord.Intents.all())@client.event   
async def on_ready () :
print ("Bot is Up and Ready!")
try:synced = await client.tree.sync ()print (f"Synced {len (synced)} command(s)")except Exception as e:print(e)@client.tree.command (name="say")
@app_commands.describe (thing_to_say="What should I say?") 
async def say(interaction: discord. Interaction, thing_to_say: str):await interaction.response.send_message(f"{interaction.user.name} said: '{thing_to_say}'")

安装FFmpeg

	Linux系统安装FFmpeg# 下载ffmpeg1. wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz# 解压缩2. tar -zxvf ffmpeg-3.1.tar.gz# 指定安装目录3. cd ffmpeg-3.14. ./configure --prefix=/usr/local/ffmpeg5. sudo make install# 开启修改配置 (“i” 修改 | “esc + ’:' + 'wq' 保存退出)6. vi /etc/profile# 配置最后填入路径7. export PATH=$PATH:/usr/local/ffmpeg/bin# 设置生效8. source /etc/profile# 查看版本9. ffmpeg -version* 若报错「 nasm/yasm not found or too old 」 # 安装yasm编译器10. wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz11. tar -zxvf yasm-1.3.0.tar.gz12. cd yasm-1.3.013. ./configure14. sudo make install# 安装成功后进入到ffmpeg的文件夹下设置更新15.find / -name ffmpeg15. ./configure16. make17. sudo make install# PyNaCL安装18. /path/~_venv/bin/pip3 install PyNaCL

5. Bot回复Button

import discord
class Menu(discord.ui.View):def _init_(self):super()._init_()self.value = None@discord.ui.button(label="Send Message", style=discord.ButtonStyle.grey)async def menu1(self, interaction: discord.Interaction, button: discord.ui.Button):await interaction.response.send_message("Clicke Me")@discord.ui.button(label="Edit Message", style=discord.ButtonStyle.green)async def menu2(self, interaction: discord.Interaction, button: discord.ui.Button):await interaction.response.edit_message(content="Edit Me")@discord.ui.button(label="Edited Embed", style=discord.ButtonStyle.blurple)async def menu3(self, interaction: discord.Interaction, button: discord.ui.Button):embed = discord.Embed(color=discord.Color.random())embed.set_author(name=f"Embed Me")embed.add_field(name="Civo", value="Subscribe")await interaction.response.edit_message(embed=embed)@discord.ui.button(label="Quit", style=discord.ButtonStyle.red)async def menu4(self, interaction: discord.Interaction, button: discord.ui.Button):embed = discord.Embed(color=discord.Color.random())embed.set_author(name=f"Goodbye kid")embed.add_field(name="Bye bye", value="Make sure to Subscribe")await interaction.response.edit_message(embed=embed)self.value = Falseself.stop()@client.command()
async def menu(ctx):view = Menu()view.add_item(discord.ui.Button(label="URL Button", style=discord.ButtonStyle.link, url="https://www.glissando.info"))await ctx.reply("This is menu", view=view)

Button效果图

6. Bot 接入ChatGPT

# chatgptbot  
@client.tree.command(name="lyrics")
async def GPTprompt(interaction: discord.Interaction, prompt: str):async with aiohttp.ClientSession() as session:API_KEY = ""payload = {"model": "text-davinci-003","prompt": prompt,"temperature": 0.5,"max_tokens": 100,"presence_penalty": 0,"frequency_penalty": 0,}headers = {"Authorization": f"Bearer {API_KEY}"}await interaction.response.defer(ephemeral=True)async with session.post("https://api.openai.com/v1/completions", json=payload, headers=headers) as resp:response = await resp.json()embed = str(response["choices"][0]["text"])await interaction.response.send_message(f"{embed}")

7. Bot 显示个人简介

@client.tree.context_menu(name="whothis")
async def whothi![请添加图片描述](https://img-blog.csdnimg.cn/b6c1b7d1b6f8466eb515584fb537fcbe.png)
s(interaction: discord.Interaction, member: discord.Member):embed = discord.Embed(title=f"{member.name}#{member.discriminator}", description=f"ID: {member.id}")embed.add_field(name="Joined Discord", value=member.created_at.strftime("%d/%m/%Y %H:%M:%5"), inline=False)embed.add_field(name="Roles", value="".join([role.mention for role in member.roles]), inline=False)embed.add_field(name="Badges", value="".join([badge.name for badge in member.public_flags.all()]), inline=False)embed.add_field(name="Activity", value=member.activity)embed.set_thumbnail(url=member.avatar.url)await interaction.response.send_message(embed=embed, ephemeral=True)

请添加图片描述

8. Bot 发送附件/Coin限制/内容信息板

@client.tree.command(name="Attachment")
@app_commands.describe(prompt="prompt")
async def prompt(interaction: discord.Interaction, prompt: str, ):coins = 100if coins > 1:embed = discord.Embed(title=f"Mini Love", description=f"USID: 032506304932")embed.add_field(name="Owner", value=f"{interaction.user.name} | {interaction.user.id}", inline=False)embed.add_field(name="Birthday", value='06/06/2023 15:30', inline=False)embed.set_thumbnail(url='..')file_path = '../1.mid'filename = file_path.split('/')[-1]with open(file_path, 'rb') as file:linkfile = discord.File(file, filename=filename)await interaction.response.send_message(file=linkfile, embed=embed, ephemeral=True)else:embed = discord.Embed(title=f"Out of coins", description=f"")embed.add_field(name="more coin", value='https://...', inline=False)await interaction.response.send_message(embed=embed, ephemeral=True)

10. 特别笔记

1) 同时使用@client.event和@client.command

# Discord.py的问题,需要在on_message结尾处加入process_commands
@client.command():
async def play(ctx):...@client.event
async def on_message(message):...await client.process_commands(message)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/64896.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

烟雾弹?突然转变?如何看待微软发声:中国是主要的对手

是的,我又回来了,今天要跟各位唠的还是ChatGPT的嗑。今天的新闻是啥呢? 《微软总裁:中国将是 ChatGPT 的主要对手,我们的优势不大》 说实话,我看到这个新闻的时候,大感震撼,在相关报…

GitHub/GitLab同天宣布裁员,最高比例10%!GitHub所有办公室不再续租

明敏 发自 凹非寺量子位 | 公众号 QbitAI 一天之内,原本是老对手的GitHub、GitLab,双双宣布裁员计划。 比例分别是10%和7%。 预计将有300人离开GitHub,100人告别GitLab。 裁员原因十分一致:调整预算。 GitHub还宣布,所…

真实大揭秘:生成式AI到底对网络安全行业造成了哪些影响?

聚焦源代码安全,网罗国内外最新资讯! 作者:ELIAS GROLL、CHRISTIAN VASQUEZ 和AJ VICENS 编译:代码卫士 在网络安全行业,放眼望去,无论是大会、交易博览会还是新闻头条,规模最大的企业都在声称&…

GTC23 | NVIDIA 与合作伙伴携手升级 Omniverse,为艺术家和开发者优化 3D 工作流奠定基础

Omniverse 平台进行重大更新,将新增生成式 AI、模拟和工业元宇宙访问入口。 基于 NVIDIA Omniverse(创建和运行元宇宙应用的平台)中全新的 Omniverse Connectors 及其他更新,开发者与创作者可以更好地挖掘生成式 AI、模拟和工业元…

垃圾分类数据集

训练集的制作是一件成本很高的事情,下面是一份包括4大类40个小类的垃圾数据集。

垃圾分类图片数据集

该图片数据集是作者自己收集整理的,一共有四个大文件夹,对应着不同的垃圾类别,每个文件夹中有各自包含的垃圾名称及其图片,当前数据集一共有246种垃圾,共包含图片80961张,大家如果有相关研究需要可以自行下…

【图像识别与处理】构建用于垃圾分类的图像分类器

1 构建图像分类器 训练一个卷积神经网络,用fastai库(建在PyTorch上)将图像分类为纸板,玻璃,金属,纸张,塑料或垃圾。使用了由Gary Thung和Mindy Yang手动收集的图像数据集。数据集下载地址如下&…

ART运行时垃圾收集机制简要介绍和学习计划

为了学习ART运行时的垃圾收集机制,我们先把Dalvik虚拟机的垃圾收集机制研究了一遍。这是因为两者都使用到了Mark-Sweep算法,因此它们在概念上有很多一致的地方。然而在实现上,Dalvik虚拟机的垃圾收集机制要简单一些。这样我们就可以先从简单的…

【电子学会】2019年03月图形化二级 -- 垃圾分类

垃圾分类 垃圾分类已经成为我们日常生活中很重要的一部分,这对于环境保护、资源回收利用具有重要意义。 下面我们做一个简单的垃圾分类互动游戏。 1. 准备工作 (1)导入背景库中的“Mural”,并编辑该背景,增加如下图中的两个垃圾桶,注明“可回收垃圾”和“不可回收垃圾…

Android 垃圾分类APP(二)垃圾分类之手动输入

前言 在上一篇文章中进行了项目的搭建和网络请求的测试,还不错相信你一定可以完成。 正文 这篇文章要做的就是手动输入物品去完成垃圾分类的结果显示,也不会很难,我会讲的细一点。 一、修改样式 先配置一些资源,找到你的res下的…

第七届工程训练大赛垃圾分类

第七届全国大学生工程训练大赛垃圾分类 前言一、机械结构设计1.Solidworks建模2.建模的不足以及改进1.挡板的添加2.履带防滑 3.整体实物 二、视觉识别部分1.引入库2.识别部分 三、上下位机通信方式:1.高低电平通信:1.2高低电平树莓派部分:2.stm32串口通信部分&#…

昇腾应用案例体验:(3) 垃圾分类

昇腾AI应用,探索人工智能的无限可能,使能千行百业 垃圾分类 概述 垃圾分类是对垃圾收集处置传统方式的改革,是对垃圾进行有效处置的一种科学管理方法。人们面对日益增长的垃圾产量和环境状况恶化的局面,如何通过垃圾分类管理&a…

上海居民被垃圾分类逼疯!这款垃圾自动分类器也许能帮上忙

作者 | 视说君 来源 | 授权转载自视说AI(ID:techtalkai) 让垃圾自动分类 近期垃圾分类成为了一个热门话题,原来直接一次性扔掉的垃圾,现在都需要分门别类进行投放。从今年7月1日起,新的《上海市生活垃圾管理条例》正式…

深度学习:垃圾自动分类

导 言 垃圾分类,指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。这不仅是出于生态环境角度考虑,“没有垃圾,只有放错位置的资源”,分类收集后,不少垃圾都可…

最新一代智能垃圾分类系统的实施方案

一说到智能垃圾分类,大家普遍的理解是:智能垃圾分类箱投入使用后自动进行垃圾分类。因为“智能”,所以解释为自动分类,一切真的很正常;有很多人有这样的误解。也许在未来,这样的功能会一个个完成&#xff0…

Garbage Classification 垃圾分类测试

Garbage classification 作者背景 郝航以,15岁,女,成都,高中国际部在读。暑假初学Python~ 项目背景 这是我暑假时自我创建的一个代码。 所谓编程,就是要走在时代的前端。上海的“垃圾分类”,卷来了一股风…

对垃圾分类工作作出重要指示PPT模板

模板介绍 精美PPT模板设计,对垃圾分类工作作出重要指示PPT模板。一套垃圾分类幻灯片模板,内含灰色多种配色,精美风格设计,动态播放效果,精美实用。 一份设计精美的PPT模板,可以让你在汇报演讲时脱颖而出。…

Android 垃圾分类APP(四)垃圾分类之图像输入

图像输入 前言正文一、创建平台应用二、新建图像识别页面三、网络订阅四、编写页面代码五、识别网络图片六、识别相册图片七、识别拍照图片八、垃圾分类九、源码 前言 在上一篇文章中完成了语音输入,这一篇来写图像输入 正文 图像输入无非就是图片识别嘛&#xff0…

垃圾分类图片数据集分享-约10w张数据集

1.获取方式 点赞本博客评论区留邮箱,博主在会发送(私信博主)。 访问的人太多了,需要私信联系。 截至到2021.03.30评论区所有邮箱已无偿发送 图片数据集直接留邮箱即可。 2.问题描述 最近在做一个相关项目,从网上整理了许许多多的有关于垃圾…

垃圾分类调研

垃圾分类 welcome,我们是电子科技大学的学生,因为对垃圾分类的一些问题感兴趣,于是我们进行了一些调查。 小组信息 学校:UESTC 年纪:2019级大一学生 成员:林浩,李则程,张智霖 分…