From 7f05c2584756bc9745af543de9629f9f5a72fe69 Mon Sep 17 00:00:00 2001 From: bdzxb <1443103348@qq.com> Date: Wed, 13 May 2026 23:37:42 +0800 Subject: [PATCH] new file: .idea/.gitignore new file: .idea/astrbot_plugin_bd_mc.iml new file: .idea/inspectionProfiles/Project_Default.xml new file: .idea/misc.xml new file: .idea/modules.xml new file: .idea/vcs.xml new file: LICENSE new file: __pycache__/main.cpython-311.pyc new file: __pycache__/main.cpython-312.pyc new file: __pycache__/main.cpython-313.pyc new file: _conf_schema.json new file: main.py new file: metadata.yaml new file: static/files/ceshi.txt new file: static/img/server-icon.png --- .idea/.gitignore | 8 + .idea/astrbot_plugin_bd_mc.iml | 9 + .idea/inspectionProfiles/Project_Default.xml | 12 + .idea/misc.xml | 8 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + LICENSE | 661 +++++++++++++++++++ __pycache__/main.cpython-311.pyc | Bin 0 -> 18294 bytes __pycache__/main.cpython-312.pyc | Bin 0 -> 9997 bytes __pycache__/main.cpython-313.pyc | Bin 0 -> 13321 bytes _conf_schema.json | 29 + main.py | 230 +++++++ metadata.yaml | 6 + static/files/ceshi.txt | 1 + static/img/server-icon.png | Bin 0 -> 32319 bytes 15 files changed, 978 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/astrbot_plugin_bd_mc.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 LICENSE create mode 100644 __pycache__/main.cpython-311.pyc create mode 100644 __pycache__/main.cpython-312.pyc create mode 100644 __pycache__/main.cpython-313.pyc create mode 100644 _conf_schema.json create mode 100644 main.py create mode 100644 metadata.yaml create mode 100644 static/files/ceshi.txt create mode 100644 static/img/server-icon.png diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/astrbot_plugin_bd_mc.iml b/.idea/astrbot_plugin_bd_mc.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/astrbot_plugin_bd_mc.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..066e8de --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d50a49f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9efea8c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3423cec --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 2022-2099 AstrBot Plugin Authors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/__pycache__/main.cpython-311.pyc b/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1fa9deba066641e1ca51bbc2aad6c57ec1ec7aa GIT binary patch literal 18294 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 E2U)EZ)Bpeg literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..382d3f538ce6305eaecffd1e7b2356322eb9e536 GIT binary patch literal 9997 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 DADPUc literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a8b2383214db7b8410f4e453548ed68adb29554 GIT binary patch literal 13321 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 Zzmzq}nJ#9?J5Oi?23fZGbAd?f|6h7MNgV(H literal 0 HcmV?d00001 diff --git a/_conf_schema.json b/_conf_schema.json new file mode 100644 index 0000000..b406af6 --- /dev/null +++ b/_conf_schema.json @@ -0,0 +1,29 @@ +{ + "email_usr": { + "description": "邮箱", + "type": "string", + "hint": "邮箱", + "obvious_hint": true, + "default": "123456@qq.com" + }, + "emcil_paswd": { + "description": "邮箱授权码", + "type": "string", + "hint": "邮箱授权码", + "obvious_hint": true, + "default": "123456" + }, + "emcil_imap": { + "description": "IMAP服务器地址", + "type": "string", + "hint": "IMAP服务器地址", + "obvious_hint": true, + "default": "imap.qq.com" + }, + "emcil_white": { + "description": "发件人白名单", + "type": "list", + "hint": "只接受指定发件人的邮件", + "obvious_hint": true + } +} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..43e4347 --- /dev/null +++ b/main.py @@ -0,0 +1,230 @@ + +from pathlib import Path +import astrbot.core.message.components as Comp +import datetime +import json +from astrbot.api.event import filter, AstrMessageEvent,MessageChain +from astrbot.api.star import Context, Star, register, StarTools +from astrbot.api import logger, AstrBotConfig +from astrbot.api.message_components import Node, Plain,Video,Image,Nodes,File +from astrbot.core.utils.session_waiter import ( + session_waiter, + SessionController, +) +from typing import List +import imaplib +# 导入email库用于解析邮件内容 +import email +# 导入os库用于文件和目录操作 +import os +# 从datetime导入datetime用于日期时间处理 +from datetime import datetime +# 导入email.utils用于邮件日期解析 +import email.utils +# 导入email.header用于解码邮件头 +import email.header +from lxml import html + +import requests +from urllib.parse import urlparse +@register("astrbot_bdzxb_bill", "bd_bill", "账单统计", "1.0.0") +class MyPlugin(Star): + def __init__(self, context: Context, config: AstrBotConfig): + super().__init__(context) + self.ceshi = None + self.email_usr = None + self.emcil_paswd = None + self.emcil_imap = None + self.message_target = None + self.emcil_white = None + self.file_path = "data/plugins/astrbot_bdzxb_bill" + self.config = config + self.chatid = None + + async def initialize(self): + """可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。""" + # 读取配置信息 + self.email_usr = self.config.email_usr + self.emcil_paswd = self.config.emcil_paswd + self.emcil_imap = self.config.emcil_imap + self.emcil_white = self.config.emcil_white + # 登录邮箱 + def emaillog(self): + logger.info(f" 开始执行 登录邮箱 {self.email_usr} 命令 ") + # 邮箱登录用户名 + email_user = self.email_usr + # 邮箱授权码(非登录密码),用于IMAP协议认证 + email_password = self.emcil_paswd + # IMAP服务器地址,Foxmail使用QQ邮箱的IMAP服务器 + imap_server = self.emcil_imap + mail = imaplib.IMAP4_SSL(imap_server) + # 使用用户名和授权码登录邮箱 + try: + mail.login(email_user, email_password) + # 查询收件箱 + mail.select("inbox") + # 设定查询条件 + from_clause = " OR ".join([f'FROM "{sender}"' for sender in self.emcil_white]) + # 获取今天的日期,格式化为IMAP要求的格式(如"21-Jul-2025") + today = datetime.now().strftime("%d-%b-%Y") + # search_criteria = f'({from_clause} SINCE "{today}" HAS attachment)' + logger.info(f"严格模式: 只处理今天({today})收到的邮件") + logger.info(f"发件人白名单: {self.emcil_white}") + # logger.info(f"搜索条件: {search_criteria}") + + # 执行IMAP搜索命令 + status, messages = mail.search(None, from_clause) + if status != "OK": # 检查搜索是否成功 + raise Exception("邮件搜索失败") + + # 获取邮件ID列表并只取最后20个(最新的20封) + mail_ids = messages[0].split()[-20:] + filenames = "" + for mail_id in reversed(mail_ids): + # 获取邮件完整内容(RFC822格式) + status, msg_data = mail.fetch(mail_id, "(RFC822)") + if status != "OK": # 如果获取失败则跳过 + continue + # 解析邮件内容为Message对象 + email_message = email.message_from_bytes(msg_data[0][1]) + # 验证发件人是否在白名单中 + # ======================== + from_header = email.utils.parseaddr(email_message['From'])[1] # 解析发件人邮箱 + if from_header not in self.emcil_white: # 严格检查白名单 + logger.debug(f"跳过非白名单发件人: {from_header}") + continue + # # 邮件日期验证 + # # =========== + # try: + # # 解析邮件日期头 + # mail_date = email.utils.parsedate_to_datetime(email_message['Date']) if email_message['Date'] else None + # if mail_date and mail_date.date() != datetime.now().date(): # 如果不是今天则跳过 + # logger.debug(f"跳过非今天({mail_date.date()})收到的邮件") + # continue + # elif not mail_date: # 如果邮件没有日期信息则默认处理 + # logger.debug("邮件无日期信息,默认处理") + # except Exception as e: # 日期解析错误处理 + # logger.warning(f"日期解析错误: {str(e)},默认处理") + # 遍历邮件各部分 + # ============= + for part in email_message.walk(): # 递归遍历邮件所有部分 + if part.get_content_maintype() == "multipart": # 跳过multipart容器部分 + continue + + # 检查是否为.zip附件 + # ================== + filename = part.get_filename() # 获取附件文件名 + # 获取正文 + maildata = part.get_payload(decode=True) + # 微信导出文件需要点击链接下载 检测正文中是否包含链接 + etree = html.etree + tree = etree.HTML(maildata) + a_tags = tree.xpath('//a') + for a_tag in a_tags: + # 获取到url后下载url + urlt = a_tag.get("href") + if urlt: + filenames += self.download_file(urlt=urlt) + content_type = part.get_content_type() # 获取内容类型 + # 判断条件: + # 1. 文件名以.zip结尾,或 + # 2. 内容类型是Excel文件 + # if (filename and filename.lower().endswith(".zip")) or \ + # (content_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"): + + # 处理无文件名的情况 + # ================ + if not filename: # 如果附件没有文件名 + # 使用邮件ID生成唯一文件名 + filename = f"attachment_{mail_id.decode()}.zip" + + # 文件名处理 + # ========= + # 解码邮件头中的文件名 + decoded_name = email.header.decode_header(filename)[0][0] + if isinstance(decoded_name, bytes): + decoded_name = decoded_name.decode('utf-8') + + today_str = datetime.now().strftime("%Y%m%d") # 获取当前日期字符串 + base_name, ext = os.path.splitext(decoded_name) # 拆分文件名和扩展名 + # 生成新文件名格式:YYYYMMDD-原文件名.zip + new_filename = f"{today_str}-{base_name}{ext}" + if filename: + new_filename = filename + # 拼接完整的文件保存路径 + filepath = os.path.join(StarTools.get_data_dir("astrbot_bdzxb_bill"), new_filename) + + # 附件保存处理 + # =========== + if not os.path.exists(filepath): # 检查文件是否已存在 + # 以二进制模式保存附件 + with open(filepath, "wb") as f: + f.write(part.get_payload(decode=True)) # 解码并写入附件内容 + logger.info(f"下载附件: {filename} -> {new_filename}") + else: # 文件已存在则跳过 + logger.info(f"附件已存在,跳过: {new_filename}") + + + + return "获取成功:"+filenames + # 查看白名单邮件 + # if from_header not in self.emcil_white: # 严格检查白名单 + # logger.debug(f"跳过非白名单发件人: {from_header}") + except Exception as e: + logger.error(f" 邮箱登陆失败 抛出异常:{e}") + return "邮件搜索失败" + + + #帮助 + @filter.command("zdhelp") + async def mchelp(self, event: AstrMessageEvent): + logger.info(" 开始执行 zdhelp 命令 ") + helptxt = """ """ + yield event.plain_result(f"{helptxt}") + #获取解压密码冰进行下载解压 + @filter.command("mm") + async def wxmm(self, event: AstrMessageEvent, wxmm: str,zfbmm: str): + # 登录邮箱 + emaillogtxt = self.emaillog() + yield event.plain_result(f"{emaillogtxt}") + + + + + def download_file(self,urlt): + response = requests.get(urlt, stream=True) + response.raise_for_status() + + download_dir = StarTools.get_data_dir("astrbot_bdzxb_bill") + os.makedirs(download_dir, exist_ok=True) + file_name = os.path.basename(urlparse(urlt).path) + if "." not in file_name: + file_name += ".zip" + logger.info(f"下载文件名是{file_name}") + file_path = os.path.join(download_dir, file_name) + logger.info(f"下载文件路径是{file_path}") + with open(file_path, 'wb') as file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + file.write(chunk) + + return file_name + +#保存文件 + def get_json_path(self, filename: str) -> Path: + """ + 读取Jason文件 + + Args: + filename: 文件名称 + + Returns: + JSON文件的Path对象 + """ + data_path = StarTools.get_data_dir("astrbot_bdzxb_bill") + json_path = data_path / f'{filename}.json' + json_path.parent.mkdir(parents=True, exist_ok=True) + return json_path + + async def terminate(self): + """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" diff --git a/metadata.yaml b/metadata.yaml new file mode 100644 index 0000000..9b973d8 --- /dev/null +++ b/metadata.yaml @@ -0,0 +1,6 @@ +name: astrbot_bdzxb_bill # 这是你的插件的唯一识别名。 +desc: 账单统计 # 插件简短描述 +version: 1.0.0 # 插件版本号。格式:v1.1.1 或者 v1.1 +author: bdzxb # 作者 +repo: https://gitea.bdzxb.top/bdzxb/astrbot_bdzxb_bill # 插件的仓库地址 + diff --git a/static/files/ceshi.txt b/static/files/ceshi.txt new file mode 100644 index 0000000..1a237b6 --- /dev/null +++ b/static/files/ceshi.txt @@ -0,0 +1 @@ +这是一个测试文件 \ No newline at end of file diff --git a/static/img/server-icon.png b/static/img/server-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df32239170609cfdace080053bc40bd3096ac60b GIT binary patch literal 32319 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