# BiliBiliHelper Python Version # Copy right (c) 2019-2020 TheWanderingCoel # 该代码实现了控制台功能 # 本文件对yjqiang大佬的版本进行了一些删减 # 代码来自:https://github.com/yjqiang/bilibili-live-tools/blob/master/bili_console.py import os from Statistics import Statistics from Utils import Utils import platform if platform.system() == "Windows": from Windows_Log import Log else: from Unix_Log import Log import asyncio from cmd import Cmd from Config import * def fetch_real_roomid(roomid): if roomid: real_roomid = [[roomid], Utils.check_room] else: real_roomid = config["Live"]["ROOM_ID"] return real_roomid class Console(Cmd): prompt = "" def __init__(self, loop): self.loop = loop Cmd.__init__(self) def guide_of_console(self): print(" _______________ ") print("| 欢迎使用本控制台 |") print("|1输出本次的参与抽奖统计 |") print("|2查看目前拥有礼物的统计 |") print("|3查看持有勋章状态 |") print("|4获取直播个人的基本信息 |") print("|5检查今日任务的完成情况 |") print("|6模拟电脑网页端发送弹幕 |") print("|7直播间的长短号码的转化 |") print("|8手动送礼物到指定直播间 |") print("|9房间号码查看主播 |") print("|10当前拥有的扭蛋币 |") print("|11开扭蛋币 |") print("|12退出软件 |") print("|注:执行时输入%s可取消命令|" % (config["Other"]["CANCEL_COMMAND"].center(6))) print("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ") def default(self, line): self.guide_of_console() def emptyline(self): self.guide_of_console() def do_1(self, line): Statistics.print_statistics() def do_2(self, line): self.append2list_console(Utils.fetch_bag_list) def do_3(self, line): self.append2list_console(Utils.fetch_medal) def do_4(self, line): self.append2list_console(Utils.fetch_user_info) def do_5(self, line): self.append2list_console(Utils.check_taskinfo) def do_6(self, line): msg = input("请输入要发送的信息:") if msg == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return roomid = input("请输入要发送的房间号:") if roomid == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return real_roomid = fetch_real_roomid(roomid) self.append2list_console([[msg, real_roomid], Utils.send_danmu]) def do_7(self, line): roomid = input("请输入要转化的房间号:") if roomid == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return if not roomid: roomid = config["Live"]["ROOM_ID"] self.append2list_console([[roomid], Utils.check_room]) def do_8(self, line): self.append2list_console([[True], Utils.fetch_bag_list]) bagid = input("请输入要发送的礼物编号:") if bagid == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return giftnum = input("请输入要发送的礼物数目:") if giftnum == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return giftnum = int(giftnum) roomid = input("请输入要发送的房间号:") if roomid == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return real_roomid = fetch_real_roomid(roomid) self.append2list_console([[real_roomid, giftnum, bagid], Utils.send_gift]) def do_9(self, line): roomid = input("请输入roomid:") if roomid == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return real_roomid = fetch_real_roomid(roomid) self.append2list_console([[real_roomid], Utils.fetch_liveuser_info]) def do_10(self, line): self.append2list_console(Utils.fetch_capsule_info) def do_11(self, line): count = input("请输入要开的扭蛋数目(1或10或100):") if count == config["Other"]["CANCEL_COMMAND"]: print("操作取消") return self.append2list_console([[count], Utils.open_capsule]) def do_12(self, line): os._exit(0) def append2list_console(self, request): asyncio.run_coroutine_threadsafe(self.excute_async(request), self.loop) # inst.loop.call_soon_threadsafe(inst.queue_console.put_nowait, request) async def excute_async(self, i): if isinstance(i, list): for j in range(len(i[0])): if isinstance(i[0][j], list): i[0][j] = await i[0][j][1](*(i[0][j][0])) if i[1] == "normal": i[2](*i[0]) else: await i[1](*i[0]) else: await i()