Pygame与Discord机器人 [英] Pygame with discord bot
本文介绍了Pygame与Discord机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
import discord
import random
import pygame
import time
client = discord.Client()
white = (255,255,255)
clock = pygame.time.Clock()
green = (0,255,0)
red =(255,0,0)
black = (0,0,0)
global song
song = 0
@client.event
async def on_message(message):
# we do not want the bot to reply to itself
if message.author == client.user:
return
if message.content.startswith(''):
while True:
if song == 1:
await client.send_message(message.channel, ';;play https://www.youtube.com/watch?v=cUbFzEMQ2Fs')
elif song == 2:
await client.send_message(message.channel, ';;play https://www.youtube.com/watch?v=YlomIQF2zbI')
else:
await client.send_message(message.channel, "HI")
pygame.quit()
def interface():
pygame.init()
gameDisplay = pygame.display.set_mode((500, 500))
def button(x, y, w, h, ac, ic, songs):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x + w > mouse[0] > x and y + h > mouse[1] > y:
pygame.draw.rect(gameDisplay, ac, (x, y, w, h))
if click[0] == 1 and songs != 0:
else:
pygame.draw.rect(gameDisplay, ic, (x, y, w, h))
while True:
event = pygame.event.get()
gameDisplay.fill(white)
button(50, 50, 50, 50, red, green, 1)
button(50, 50, 50, 50, red, green, 2)
pygame.display.update()
clock.tick(60)
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
interface()
'''channel = client.get_channel('id')
await client.join_voice_channel(channel)
print('Bot should joined the Channel')'''
client.run('token')
有人有点卡住,有人对如何做有什么建议吗?我想让机器人在pygame显示界面上单击一个按钮时说些什么.谢谢您能给我的帮助,
Does anyone have any suggestion on how to do it as im a bit stuck. I would like the bot say something when i click a button on the pygame display interface. Thank you for any help that you can give me,
推荐答案
尽管这并不完全是您的代码,但它为您提供了使用线程同时运行它们的粗略想法.我在示例中解释了所有内容.按下方框后,它将向选定的频道发送消息.
Although this is not exactly your code, it gaves to you the rough idea of using threading to run both of them at the same time. I explained everything through out the example. It will send a message to a selected channel when the square is pressed.
import discord, random, pygame, time, asyncio
import random # just for fun
from threading import Thread
### better to set them as a global variable
client = discord.Client()
pygame.init() # put these in the beginning
gameDisplay = pygame.display.set_mode((500, 500))
white = (255,255,255)
clock = pygame.time.Clock()
green = (0,255,0)
red = (255,0,0)
black = (0,0,0)
###
#client.send_message()
@client.event
async def on_message(message):
# do what you want to do...
pass
async def send_message(msg):
await client.send_message(client.get_channel('197481285852069898'), msg) # send a message, you can use channel id or any channel instance
def run_gui(): # for running the gui
gameDisplay.fill(white) # initialize the screen white
current_color = red
my_rect = pygame.draw.rect(gameDisplay, current_color, (50,50,50,50)) # draw a rect and save the rect
while 1: # pygame mainloop
pygame.display.update() # update the screen
for event in pygame.event.get(): # proper way of retrieving events
if event.type == pygame.MOUSEBUTTONDOWN: # check if the event is right clicked on mouse
mouse = pygame.mouse.get_pos()
if my_rect.collidepoint(mouse): # see if it pressed the rect
# do stuff if the button is pressed...
current_color = red
# send a random message maybe?
choosen = random.choice(['hello','hi','I am a bot','wassup','I luv u <3'])
asyncio.ensure_future(send_message( msg=choosen)) # since discord.py uses asyncio
else:
# do stuff if it's not pressed...
current_color = green
# refill the screen white
gameDisplay.fill(white)
# redraw the rect
my_rect = pygame.draw.rect(gameDisplay, current_color, (50,50,50,50))
clock.tick(60) # 60 fps
def run_bot(): # for running the bot
client.run('token') # run the bot
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
Thread(target=run_bot).start() # start thread the run the bot
run_gui() # run the gui
这篇关于Pygame与Discord机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文