Skip to content

Instantly share code, notes, and snippets.

@diramazioni
Last active November 22, 2019 09:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diramazioni/185e8d30ca01a981d88a to your computer and use it in GitHub Desktop.
Save diramazioni/185e8d30ca01a981d88a to your computer and use it in GitHub Desktop.
stub for making a chat plugin for blender
bl_info = {
"name": "Chat on IRC",
"author": "Eli Spizzichino",
"version": (0, 0, 1),
"blender": (2, 7, 4),
"location": "Font Object Data > Chat on IRC",
"description": "Chat on IRC with asyncio",
"category": "Development"}
from irc3.plugins.command import command
import irc3
from irc3.compat import asyncio
#import asyncio
from asyncio import coroutine, sleep, Task, wait_for
import asyncio_bridge
#from asyncio_bridge import BlenderListener
import bpy
from bpy.props import *
@irc3.plugin
class Plugin(object):
def __init__(self, bot):
self.bot = bot
@irc3.event(irc3.rfc.JOIN)
def say_hi(self, mask, channel):
"""Say hi when someone join a channel"""
if mask.nick != self.bot.nick:
self.bot.privmsg(channel, 'Hi %s!' % mask.nick)
#bpy.ops.dialog.message('INVOKE_DEFAULT', message = "hello")
else:
self.bot.privmsg(channel, 'Hi all!')
@command(permission='view')
def echo(self, mask, target, args):
"""Echo
%%echo <message>...
"""
yield ' '.join(args['<words>'])
bot = None
def irc_connect(prop):
loop = asyncio.get_event_loop()
#bot = irc3.IrcBot.from_argv(loop=loop) #blender crash
bot = irc3.IrcBot(loop=loop,
nick=prop.ircNick, autojoins=[prop.ircRoom],
host=prop.ircServer, port=prop.ircPort, ssl=False,
includes=[
'irc3.plugins.core',
'irc3.plugins.command',
__name__, # this register MyPlugin
]).run(forever=False)
return bot # <-- bot is None
class ChatPanel_Props(bpy.types.PropertyGroup):
def initChat(self, context):
text = context.object
text.update_tag(refresh={'DATA'})
text.data.body = "Hello"
isChatActive = BoolProperty(name='Chat Active', default=False, update=initChat)
ircRoom = StringProperty(name='Room', default='#irc3_test')
ircServer = StringProperty(name='Server', default='irc.freenode.net')
ircPort = IntProperty(name='Port', default=6667)
ircNick = StringProperty(name='Nick', default='achat')
ircMessage = StringProperty(name='Message', default='')
class ChatPanel(bpy.types.Panel):
"""Creates a ChatPanel Object properties window"""
bl_label = "Chat Panel"
bl_idname = "chat_panel"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
@classmethod
def poll(cls, context):
return context.object.type == 'FONT'
def draw_header(self, context):
self.layout.prop(context.object.data.chat_props, 'isChatActive', '')
def draw(self, context):
props = context.object.data.chat_props
layout = self.layout
layout.enabled = props.isChatActive
obj = context.object
row = layout.row()
row.label(text="Hello irc people!", icon='WORLD_DATA')
row = layout.row()
row.prop(props, "ircServer")
row.prop(props, "ircPort")
row = layout.row()
row.prop(props, "ircRoom")
row.prop(props, "ircNick")
row = layout.row()
row.operator("chat.connect")
row = layout.row()
row.prop(props, "ircMessage")
row = layout.row()
row.operator("chat.message")
class ConnectOperator(bpy.types.Operator):
bl_idname = "chat.connect"
bl_label = "connect"
def execute(self, context):
prop = context.object.data.chat_props
irc_connect(prop)
return {'FINISHED'}
class SendMessageOperator(bpy.types.Operator):
bl_idname = "chat.message"
bl_label = "say"
def execute(self, context):
bot.SIGHUP()
return {'FINISHED'}
def register():
bpy.utils.register_class(ChatPanel_Props)
bpy.types.TextCurve.chat_props = PointerProperty(type = ChatPanel_Props)
bpy.utils.register_class(ChatPanel)
bpy.utils.register_class(ConnectOperator)
bpy.utils.register_class(SendMessageOperator)
def unregister():
bpy.utils.unregister_class(ChatPanel_Props)
bpy.utils.unregister_class(ChatPanel)
bpy.utils.unregister_class(ConnectOperator)
bpy.utils.unregister_class(SendMessageOperator)
if __name__ == "__main__":
register()
asyncio_bridge.register()
bpy.ops.bpy.start_asyncio_bridge()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment